public void The_root_resolver_resolves_from_default_resolvers_then_default_provider_then_roots() { var defaultService1 = new Mock <AttributeProvider>().Object; var defaultService2 = new Mock <AttributeProvider>().Object; var providerService = new Mock <AttributeProvider>().Object; var mockDefaultResolver1 = new Mock <IDbDependencyResolver>(); mockDefaultResolver1.Setup(m => m.GetService(typeof(AttributeProvider), null)).Returns(defaultService1); var mockDefaultResolver2 = new Mock <IDbDependencyResolver>(); mockDefaultResolver2.Setup(m => m.GetService(typeof(AttributeProvider), null)).Returns(defaultService2); var mockProvider = new Mock <DbProviderServices>(); mockProvider.Setup(m => m.GetService(typeof(AttributeProvider), null)).Returns(providerService); var rootResolver = new RootDependencyResolver(); Assert.IsType <AttributeProvider>(rootResolver.GetService <AttributeProvider>()); rootResolver.SetDefaultProviderServices(mockProvider.Object, "My.Provider"); Assert.Same(providerService, rootResolver.GetService <AttributeProvider>()); rootResolver.AddDefaultResolver(mockDefaultResolver1.Object); Assert.Same(defaultService1, rootResolver.GetService <AttributeProvider>()); rootResolver.AddDefaultResolver(mockDefaultResolver2.Object); Assert.Same(defaultService2, rootResolver.GetService <AttributeProvider>()); }
public void The_root_resolver_resolves_from_default_resolvers_and_roots() { var attributeProvider1 = new Mock <AttributeProvider>().Object; var attributeProvider2 = new Mock <AttributeProvider>().Object; var mockDefaultResolver1 = new Mock <IDbDependencyResolver>(); mockDefaultResolver1.Setup(m => m.GetServices(typeof(AttributeProvider), null)).Returns(new object[] { attributeProvider1 }); var mockDefaultResolver2 = new Mock <IDbDependencyResolver>(); mockDefaultResolver2.Setup(m => m.GetServices(typeof(AttributeProvider), null)).Returns(new object[] { attributeProvider2 }); var rootResolver = new RootDependencyResolver(); var defaultProvider = rootResolver.GetServices <AttributeProvider>().Single(); Assert.IsType <AttributeProvider>(defaultProvider); rootResolver.AddDefaultResolver(mockDefaultResolver1.Object); rootResolver.AddDefaultResolver(mockDefaultResolver2.Object); var attributeProviders = rootResolver.GetServices <AttributeProvider>().ToList(); Assert.Equal(3, attributeProviders.Count); Assert.Same(attributeProvider2, attributeProviders[0]); Assert.Same(attributeProvider1, attributeProviders[1]); Assert.Same(defaultProvider, attributeProviders[2]); }
public virtual void SwitchInRootResolver(RootDependencyResolver value) { ResolverChain secondResolver = new ResolverChain(); secondResolver.Add((IDbDependencyResolver)value); this._resolvers.Second.Resolvers.Skip <IDbDependencyResolver>(1).Each <IDbDependencyResolver>(new Action <IDbDependencyResolver>(secondResolver.Add)); this._rootResolver = value; this._resolvers = new CompositeResolver <ResolverChain, ResolverChain>(this._resolvers.First, secondResolver); }
public InternalConfiguration( ResolverChain appConfigChain = null, ResolverChain normalResolverChain = null, RootDependencyResolver rootResolver = null, AppConfigDependencyResolver appConfigResolver = null) { _rootResolver = rootResolver ?? new RootDependencyResolver(); _resolvers = new CompositeResolver <ResolverChain, ResolverChain>(appConfigChain ?? new ResolverChain(), normalResolverChain ?? new ResolverChain()); _resolvers.Second.Add(_rootResolver); _resolvers.First.Add(appConfigResolver ?? new AppConfigDependencyResolver(AppConfig.DefaultInstance, this)); }
public void RootResolver_returns_the_root_resolver() { var rootResolver = new RootDependencyResolver(); var config = new InternalConfiguration( new Mock <ResolverChain>().Object, new Mock <ResolverChain>().Object, rootResolver, new Mock <AppConfigDependencyResolver>().Object); Assert.Same(rootResolver, config.RootResolver); }
public InternalConfiguration( ResolverChain appConfigChain = null, ResolverChain normalResolverChain = null, RootDependencyResolver rootResolver = null, AppConfigDependencyResolver appConfigResolver = null, Func <DbDispatchers> dispatchers = null) { this._rootResolver = rootResolver ?? new RootDependencyResolver(); this._resolvers = new CompositeResolver <ResolverChain, ResolverChain>(appConfigChain ?? new ResolverChain(), normalResolverChain ?? new ResolverChain()); this._resolvers.Second.Add((IDbDependencyResolver)this._rootResolver); this._resolvers.First.Add((IDbDependencyResolver)(appConfigResolver ?? new AppConfigDependencyResolver(AppConfig.DefaultInstance, this, (ProviderServicesFactory)null))); this._dispatchers = dispatchers ?? (Func <DbDispatchers>)(() => DbInterception.Dispatch); }
public void The_root_resolver_can_return_a_default_history_context_factory_that_creates_HistoryContext_instances() { var factory = new RootDependencyResolver(new DefaultProviderServicesResolver(), new DatabaseInitializerResolver()) .GetService<Func<DbConnection, string, HistoryContext>>(); using (var connection = new SqlConnection()) { using (var context = factory(connection, null)) { Assert.IsType<HistoryContext>(context); } } }
public void The_root_resolver_can_return_a_default_history_context_factory_that_creates_HistoryContext_instances() { var factory = new RootDependencyResolver(new DefaultProviderServicesResolver(), new DatabaseInitializerResolver()) .GetService <Func <DbConnection, string, HistoryContext> >(); using (var connection = new SqlConnection()) { using (var context = factory(connection, null)) { Assert.IsType <HistoryContext>(context); } } }
public void The_root_resolver_returns_the_default_command_formatter_factory() { var factory = new RootDependencyResolver(new DefaultProviderServicesResolver(), new DatabaseInitializerResolver()) .GetService <Func <DbContext, Action <string>, DatabaseLogFormatter> >(); var context = new Mock <DbContext>().Object; Action <string> sink = new StringWriter().Write; var formatter = factory(context, sink); Assert.IsType <DatabaseLogFormatter>(formatter); Assert.Same(context, formatter.Context); Assert.Same(sink, formatter.WriteAction); }
public void GetService_can_be_accessed_from_multiple_threads_concurrently() { for (var i = 0; i < 30; i++) { var bag = new ConcurrentBag<AttributeProvider>(); var resolver = new RootDependencyResolver(); resolver.AddDefaultResolver(new SingletonDependencyResolver<AttributeProvider>(new AttributeProvider())); resolver.AddDefaultResolver(new SingletonDependencyResolver<AttributeProvider>(new AttributeProvider())); ExecuteInParallel(() => bag.Add(resolver.GetService<AttributeProvider>())); Assert.Equal(20, bag.Count); Assert.True(bag.All(c => c.GetType() == typeof(AttributeProvider))); } }
/// <summary> /// This method is not thread-safe and should only be used to switch in a different root resolver /// before the configuration is locked and set. It is used for pushing a new configuration by /// DbContextInfo while maintaining legacy settings (such as database initializers) that are /// set on the root resolver. /// </summary> public virtual void SwitchInRootResolver(RootDependencyResolver value) { DebugCheck.NotNull(value); Debug.Assert(!_isLocked); // The following is not thread-safe but this code is only called when pushing a configuration // and happens to a new DbConfiguration before it has been set and locked. var newChain = new ResolverChain(); newChain.Add(value); _resolvers.Second.Resolvers.Skip(1).Each(newChain.Add); _rootResolver = value; _resolvers = new CompositeResolver <ResolverChain, ResolverChain>(_resolvers.First, newChain); }
public void GetServices_can_be_accessed_from_multiple_threads_concurrently() { for (var i = 0; i < 30; i++) { var bag = new ConcurrentBag <AttributeProvider>(); var resolver = new RootDependencyResolver(); resolver.AddDefaultResolver(new SingletonDependencyResolver <AttributeProvider>(new AttributeProvider())); resolver.AddDefaultResolver(new SingletonDependencyResolver <AttributeProvider>(new AttributeProvider())); ExecuteInParallel(() => resolver.GetServices <AttributeProvider>().Each(bag.Add)); Assert.Equal(60, bag.Count); Assert.True(bag.All(c => c.GetType() == typeof(AttributeProvider))); } }
public void The_root_resolver_uses_the_default_provider_services_resolver_and_caches_provider_instances() { var providerServices = new Mock<DbProviderServices>().Object; var mockProviderResolver = new Mock<DefaultProviderServicesResolver>(); mockProviderResolver .Setup(m => m.GetService(typeof(DbProviderServices), "FooClient")) .Returns(providerServices); var resolver = new RootDependencyResolver( mockProviderResolver.Object, new DatabaseInitializerResolver()); Assert.Same(providerServices, resolver.GetService<DbProviderServices>("FooClient")); mockProviderResolver.Verify(m => m.GetService(typeof(DbProviderServices), "FooClient"), Times.Once()); Assert.Same(providerServices, resolver.GetService<DbProviderServices>("FooClient")); mockProviderResolver.Verify(m => m.GetService(typeof(DbProviderServices), "FooClient"), Times.Once()); }
public void The_root_resolver_uses_the_default_provider_services_resolver_and_caches_provider_instances() { var providerServices = new Mock <DbProviderServices>().Object; var mockProviderResolver = new Mock <DefaultProviderServicesResolver>(); mockProviderResolver .Setup(m => m.GetService(typeof(DbProviderServices), "FooClient")) .Returns(providerServices); var resolver = new RootDependencyResolver( mockProviderResolver.Object, new DatabaseInitializerResolver()); Assert.Same(providerServices, resolver.GetService <DbProviderServices>("FooClient")); mockProviderResolver.Verify(m => m.GetService(typeof(DbProviderServices), "FooClient"), Times.Once()); Assert.Same(providerServices, resolver.GetService <DbProviderServices>("FooClient")); mockProviderResolver.Verify(m => m.GetService(typeof(DbProviderServices), "FooClient"), Times.Once()); }
public void The_root_resolver_resolves_from_default_resolvers_before_roots() { var attributeProvider1 = new Mock <AttributeProvider>().Object; var attributeProvider2 = new Mock <AttributeProvider>().Object; var mockDefaultResolver1 = new Mock <IDbDependencyResolver>(); mockDefaultResolver1.Setup(m => m.GetService(typeof(AttributeProvider), null)).Returns(attributeProvider1); var mockDefaultResolver2 = new Mock <IDbDependencyResolver>(); mockDefaultResolver2.Setup(m => m.GetService(typeof(AttributeProvider), null)).Returns(attributeProvider2); var rootResolver = new RootDependencyResolver(); Assert.IsType <AttributeProvider>(rootResolver.GetService <AttributeProvider>()); rootResolver.AddDefaultResolver(mockDefaultResolver1.Object); Assert.Same(attributeProvider1, rootResolver.GetService <AttributeProvider>()); rootResolver.AddDefaultResolver(mockDefaultResolver2.Object); Assert.Same(attributeProvider2, rootResolver.GetService <AttributeProvider>()); }
public void RootResolver_returns_the_root_resolver() { var rootResolver = new RootDependencyResolver(); var config = new InternalConfiguration( new Mock<ResolverChain>().Object, new Mock<ResolverChain>().Object, rootResolver, new Mock<AppConfigDependencyResolver>().Object); Assert.Same(rootResolver, config.RootResolver); }
public void The_root_resolver_resolves_from_secondary_resolvers_before_roots() { var attributeProvider1 = new Mock<AttributeProvider>().Object; var attributeProvider2 = new Mock<AttributeProvider>().Object; var mockSecondaryResolver1 = new Mock<IDbDependencyResolver>(); mockSecondaryResolver1.Setup(m => m.GetService(typeof(AttributeProvider), null)).Returns(attributeProvider1); var mockSecondaryResolver2 = new Mock<IDbDependencyResolver>(); mockSecondaryResolver2.Setup(m => m.GetService(typeof(AttributeProvider), null)).Returns(attributeProvider2); var rootResolver = new RootDependencyResolver(); Assert.IsType<AttributeProvider>(rootResolver.GetService<AttributeProvider>()); rootResolver.AddSecondaryResolver(mockSecondaryResolver1.Object); Assert.Same(attributeProvider1, rootResolver.GetService<AttributeProvider>()); rootResolver.AddSecondaryResolver(mockSecondaryResolver2.Object); Assert.Same(attributeProvider2, rootResolver.GetService<AttributeProvider>()); }
public void The_root_resolver_returns_the_default_command_formatter_factory() { var factory = new RootDependencyResolver(new DefaultProviderServicesResolver(), new DatabaseInitializerResolver()) .GetService<Func<DbContext, Action<string>, DbCommandLogger>>(); var context = new Mock<DbContext>().Object; Action<string> sink = new StringWriter().Write; var logger = factory(context, sink); Assert.IsType<DbCommandLogger>(logger); Assert.Same(context, logger.Context); Assert.Same(sink, logger.Sink); }
public void The_root_resolver_resolves_from_default_resolvers_and_roots() { var attributeProvider1 = new Mock<AttributeProvider>().Object; var attributeProvider2 = new Mock<AttributeProvider>().Object; var mockDefaultResolver1 = new Mock<IDbDependencyResolver>(); mockDefaultResolver1.Setup(m => m.GetServices(typeof(AttributeProvider), null)).Returns(new object[] { attributeProvider1 }); var mockDefaultResolver2 = new Mock<IDbDependencyResolver>(); mockDefaultResolver2.Setup(m => m.GetServices(typeof(AttributeProvider), null)).Returns(new object[] { attributeProvider2 }); var rootResolver = new RootDependencyResolver(); var defaultProvider = rootResolver.GetServices<AttributeProvider>().Single(); Assert.IsType<AttributeProvider>(defaultProvider); rootResolver.AddDefaultResolver(mockDefaultResolver1.Object); rootResolver.AddDefaultResolver(mockDefaultResolver2.Object); var attributeProviders = rootResolver.GetServices<AttributeProvider>().ToList(); Assert.Equal(3, attributeProviders.Count); Assert.Same(attributeProvider2, attributeProviders[0]); Assert.Same(attributeProvider1, attributeProviders[1]); Assert.Same(defaultProvider, attributeProviders[2]); }
public void The_root_resolver_resolves_from_default_resolvers_then_default_provider_then_roots() { var defaultService1 = new Mock<AttributeProvider>().Object; var defaultService2 = new Mock<AttributeProvider>().Object; var providerService = new Mock<AttributeProvider>().Object; var mockDefaultResolver1 = new Mock<IDbDependencyResolver>(); mockDefaultResolver1.Setup(m => m.GetService(typeof(AttributeProvider), null)).Returns(defaultService1); var mockDefaultResolver2 = new Mock<IDbDependencyResolver>(); mockDefaultResolver2.Setup(m => m.GetService(typeof(AttributeProvider), null)).Returns(defaultService2); var mockProvider = new Mock<DbProviderServices>(); mockProvider.Setup(m => m.GetService(typeof(AttributeProvider), null)).Returns(providerService); var rootResolver = new RootDependencyResolver(); Assert.IsType<AttributeProvider>(rootResolver.GetService<AttributeProvider>()); rootResolver.SetDefaultProviderServices(mockProvider.Object, "My.Provider"); Assert.Same(providerService, rootResolver.GetService<AttributeProvider>()); rootResolver.AddDefaultResolver(mockDefaultResolver1.Object); Assert.Same(defaultService1, rootResolver.GetService<AttributeProvider>()); rootResolver.AddDefaultResolver(mockDefaultResolver2.Object); Assert.Same(defaultService2, rootResolver.GetService<AttributeProvider>()); }