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 GetService_caches_the_fact_that_no_connection_factory_is_set()
        {
            var mockConfig = new Mock <AppConfig>(new ConnectionStringSettingsCollection());

            mockConfig.Setup(m => m.TryGetDefaultConnectionFactory()).Returns((IDbConnectionFactory)null);
            var resolver = new AppConfigDependencyResolver(mockConfig.Object);

            Assert.Null(resolver.GetService <IDbConnectionFactory>());
            mockConfig.Verify(m => m.TryGetDefaultConnectionFactory(), Times.Once());
            Assert.Null(resolver.GetService <IDbConnectionFactory>());
            mockConfig.Verify(m => m.TryGetDefaultConnectionFactory(), Times.Once());
        }
        public void GetService_caches_connection_factory()
        {
            var mockConfig = new Mock <AppConfig>(new ConnectionStringSettingsCollection());

            mockConfig.Setup(m => m.TryGetDefaultConnectionFactory()).Returns(new FakeConnectionFactory());
            var resolver = new AppConfigDependencyResolver(mockConfig.Object);

            var factoryInstance = resolver.GetService <IDbConnectionFactory>();

            Assert.NotNull(factoryInstance);
            mockConfig.Verify(m => m.TryGetDefaultConnectionFactory(), Times.Once());
            Assert.Same(factoryInstance, resolver.GetService <IDbConnectionFactory>());
            mockConfig.Verify(m => m.TryGetDefaultConnectionFactory(), Times.Once());
        }
예제 #4
0
        public void GetService_caches_the_fact_that_no_provider_is_registered()
        {
            var mockConfig = new Mock <AppConfig>(new ConnectionStringSettingsCollection());

            mockConfig.Setup(m => m.DbProviderServices).Returns(new NamedDbProviderService[0]);

            var resolver = new AppConfigDependencyResolver(
                mockConfig.Object, new Mock <InternalConfiguration>(null, null, null, null).Object);

            Assert.Null(resolver.GetService <DbProviderServices>("Ask.Rhod.Gilbert"));
            mockConfig.Verify(m => m.DbProviderServices, Times.Once());
            Assert.Null(resolver.GetService <DbProviderServices>("Ask.Rhod.Gilbert"));
            mockConfig.Verify(m => m.DbProviderServices, Times.Once());
        }
        public void GetService_caches_the_fact_that_no_provider_is_registered()
        {
            var mockProviders = new Mock <ProviderConfig>();

            mockProviders.Setup(m => m.TryGetDbProviderServices("Ask.Rhod.Gilbert")).Returns((DbProviderServices)null);
            var mockConfig = new Mock <AppConfig>(new ConnectionStringSettingsCollection());

            mockConfig.Setup(m => m.Providers).Returns(mockProviders.Object);

            var resolver = new AppConfigDependencyResolver(mockConfig.Object);

            Assert.Null(resolver.GetService <DbProviderServices>("Ask.Rhod.Gilbert"));
            mockProviders.Verify(m => m.TryGetDbProviderServices("Ask.Rhod.Gilbert"), Times.Once());
            Assert.Null(resolver.GetService <DbProviderServices>("Ask.Rhod.Gilbert"));
            mockProviders.Verify(m => m.TryGetDbProviderServices("Ask.Rhod.Gilbert"), Times.Once());
        }
        public void GetService_can_be_accessed_from_multiple_threads_concurrently()
        {
            var appConfig = new AppConfig(
                CreateEmptyConfig().AddDefaultConnectionFactory(typeof(FakeConnectionFactory).AssemblyQualifiedName));

            for (var i = 0; i < 30; i++)
            {
                var bag      = new ConcurrentBag <IDbConnectionFactory>();
                var resolver = new AppConfigDependencyResolver(appConfig);

                ExecuteInParallel(() => bag.Add(resolver.GetService <IDbConnectionFactory>()));

                Assert.Equal(20, bag.Count);
                Assert.True(bag.All(c => resolver.GetService <IDbConnectionFactory>() == c));
            }
        }
        public void GetService_caches_provider()
        {
            var mockProviders = new Mock<ProviderConfig>();
            mockProviders.Setup(m => m.TryGetDbProviderServices("Ask.Rhod.Gilbert")).Returns(new Mock<DbProviderServices>().Object);
            var mockConfig = new Mock<AppConfig>(new ConnectionStringSettingsCollection());
            mockConfig.Setup(m => m.Providers).Returns(mockProviders.Object);

            var resolver = new AppConfigDependencyResolver(mockConfig.Object);

            var factoryInstance = resolver.GetService<DbProviderServices>("Ask.Rhod.Gilbert");

            Assert.NotNull(factoryInstance);
            mockProviders.Verify(m => m.TryGetDbProviderServices("Ask.Rhod.Gilbert"), Times.Once());
            Assert.Same(factoryInstance, resolver.GetService<DbProviderServices>("Ask.Rhod.Gilbert"));
            mockProviders.Verify(m => m.TryGetDbProviderServices("Ask.Rhod.Gilbert"), Times.Once());
        }
        public void GetService_caches_the_fact_that_no_database_initializer_is_registered()
        {
            var mockConfig = new Mock <AppConfig>(new ConnectionStringSettingsCollection());

            mockConfig.Setup(m => m.Initializers).Returns(
                new InitializerConfig(
                    CreateEfSection(initializerDisabled: false),
                    new KeyValueConfigurationCollection()));

            var resolver = new AppConfigDependencyResolver(mockConfig.Object);

            Assert.Null(resolver.GetService <IDatabaseInitializer <DbContext> >());
            mockConfig.Verify(m => m.Initializers, Times.Once());
            Assert.Null(resolver.GetService <IDatabaseInitializer <DbContext> >());
            mockConfig.Verify(m => m.Initializers, Times.Once());
        }
예제 #9
0
        public void GetService_registers_all_providers_as_secondary_resolvers_only_once()
        {
            var mockSection       = CreateMockSectionWithProviders();
            var mockFactory       = CreateMockFactory(mockSection.Object);
            var appConfig         = new AppConfig(new ConnectionStringSettingsCollection(), null, mockSection.Object, mockFactory.Object);
            var mockConfiguration = new Mock <InternalConfiguration>(null, null, null, null);

            var resolver = new AppConfigDependencyResolver(appConfig, mockConfiguration.Object, mockFactory.Object);

            resolver.GetService <IPilkington>();

            mockConfiguration.Verify(m => m.AddSecondaryResolver(It.IsAny <DbProviderServices>()), Times.Exactly(3));

            resolver.GetService <IPilkington>();

            mockConfiguration.Verify(m => m.AddSecondaryResolver(It.IsAny <DbProviderServices>()), Times.Exactly(3));
        }
        public void GetService_caches_provider()
        {
            var mockProviders = new Mock <ProviderConfig>();

            mockProviders.Setup(m => m.TryGetDbProviderServices("Ask.Rhod.Gilbert")).Returns(new Mock <DbProviderServices>().Object);
            var mockConfig = new Mock <AppConfig>(new ConnectionStringSettingsCollection());

            mockConfig.Setup(m => m.Providers).Returns(mockProviders.Object);

            var resolver = new AppConfigDependencyResolver(mockConfig.Object);

            var factoryInstance = resolver.GetService <DbProviderServices>("Ask.Rhod.Gilbert");

            Assert.NotNull(factoryInstance);
            mockProviders.Verify(m => m.TryGetDbProviderServices("Ask.Rhod.Gilbert"), Times.Once());
            Assert.Same(factoryInstance, resolver.GetService <DbProviderServices>("Ask.Rhod.Gilbert"));
            mockProviders.Verify(m => m.TryGetDbProviderServices("Ask.Rhod.Gilbert"), Times.Once());
        }
        public void GetService_caches_the_fact_that_no_Migrations_SQL_generator_is_registered()
        {
            var mockProviders = new Mock <ProviderConfig>();

            mockProviders.Setup(m => m.TryGetMigrationSqlGeneratorFactory("Ask.Rhod.Gilbert"))
            .Returns((Func <MigrationSqlGenerator>)(() => null));

            var mockConfig = new Mock <AppConfig>(new ConnectionStringSettingsCollection());

            mockConfig.Setup(m => m.Providers).Returns(mockProviders.Object);

            var resolver = new AppConfigDependencyResolver(mockConfig.Object);

            Assert.Null(resolver.GetService <MigrationSqlGenerator>("Ask.Rhod.Gilbert"));
            mockProviders.Verify(m => m.TryGetMigrationSqlGeneratorFactory("Ask.Rhod.Gilbert"), Times.Once());
            Assert.Null(resolver.GetService <MigrationSqlGenerator>("Ask.Rhod.Gilbert"));
            mockProviders.Verify(m => m.TryGetMigrationSqlGeneratorFactory("Ask.Rhod.Gilbert"), Times.Once());
        }
예제 #12
0
        public void GetService_caches_database_initializer()
        {
            var mockConfig = new Mock <AppConfig>(new ConnectionStringSettingsCollection());

            mockConfig.Setup(m => m.DbProviderServices).Returns(new NamedDbProviderService[0]);
            mockConfig.Setup(m => m.Initializers).Returns(
                new InitializerConfig(
                    CreateEfSection(initializerDisabled: false),
                    new KeyValueConfigurationCollection()));

            var resolver = new AppConfigDependencyResolver(
                mockConfig.Object, new Mock <InternalConfiguration>(null, null, null, null).Object);
            var initializer = resolver.GetService <IDatabaseInitializer <FakeContext> >();

            Assert.NotNull(initializer);
            mockConfig.Verify(m => m.Initializers, Times.Once());
            Assert.Same(initializer, resolver.GetService <IDatabaseInitializer <FakeContext> >());
            mockConfig.Verify(m => m.Initializers, Times.Once());
        }
예제 #13
0
        public void GetService_caches_provider()
        {
            var mockConfig = new Mock <AppConfig>(new ConnectionStringSettingsCollection());

            mockConfig.Setup(m => m.DbProviderServices)
            .Returns(new[] { new NamedDbProviderService("Ask.Rhod.Gilbert", new Mock <DbProviderServices>().Object) });

            var resolver = new AppConfigDependencyResolver(
                mockConfig.Object,
                new Mock <InternalConfiguration>(null, null, null, null).Object,
                new Mock <ProviderServicesFactory>().Object);

            var factoryInstance = resolver.GetService <DbProviderServices>("Ask.Rhod.Gilbert");

            Assert.NotNull(factoryInstance);
            mockConfig.Verify(m => m.DbProviderServices, Times.Once());
            Assert.Same(factoryInstance, resolver.GetService <DbProviderServices>("Ask.Rhod.Gilbert"));
            mockConfig.Verify(m => m.DbProviderServices, Times.Once());
        }
예제 #14
0
        public void GetService_caches_connection_factory()
        {
            try
            {
                var mockConfig = new Mock <AppConfig>(new ConnectionStringSettingsCollection());
                mockConfig.Setup(m => m.DbProviderServices).Returns(new NamedDbProviderService[0]);
                mockConfig.Setup(m => m.TryGetDefaultConnectionFactory()).Returns(new FakeConnectionFactory());
                var resolver = new AppConfigDependencyResolver(
                    mockConfig.Object, new Mock <InternalConfiguration>(null, null, null, null).Object);

                var factoryInstance = resolver.GetService <IDbConnectionFactory>();

                Assert.NotNull(factoryInstance);
                mockConfig.Verify(m => m.TryGetDefaultConnectionFactory(), Times.Once());
                Assert.Same(factoryInstance, resolver.GetService <IDbConnectionFactory>());
                mockConfig.Verify(m => m.TryGetDefaultConnectionFactory(), Times.Once());
            }
            finally
            {
                Database.ResetDefaultConnectionFactory();
            }
        }
        public void GetService_caches_Migrations_SQL_generator_and_uses_it_to_return_a_new_instance_every_call()
        {
            var mockProviders = new Mock <ProviderConfig>();

            mockProviders.Setup(m => m.TryGetMigrationSqlGeneratorFactory("Ask.Rhod.Gilbert"))
            .Returns(() => new Mock <MigrationSqlGenerator>().Object);

            var mockConfig = new Mock <AppConfig>(new ConnectionStringSettingsCollection());

            mockConfig.Setup(m => m.Providers).Returns(mockProviders.Object);

            var resolver = new AppConfigDependencyResolver(mockConfig.Object);

            var migrationSqlGenerator1 = resolver.GetService <MigrationSqlGenerator>("Ask.Rhod.Gilbert");

            Assert.NotNull(migrationSqlGenerator1);
            mockProviders.Verify(m => m.TryGetMigrationSqlGeneratorFactory("Ask.Rhod.Gilbert"), Times.Once());

            var migrationSqlGenerator2 = resolver.GetService <MigrationSqlGenerator>("Ask.Rhod.Gilbert");

            Assert.NotNull(migrationSqlGenerator2);
            Assert.NotSame(migrationSqlGenerator1, migrationSqlGenerator2);
            mockProviders.Verify(m => m.TryGetMigrationSqlGeneratorFactory("Ask.Rhod.Gilbert"), Times.Once());
        }
        public void GetService_can_be_accessed_from_multiple_threads_concurrently()
        {
            var appConfig = new AppConfig(
                CreateEmptyConfig().AddDefaultConnectionFactory(typeof(FakeConnectionFactory).AssemblyQualifiedName));

            for (var i = 0; i < 30; i++)
            {
                var bag = new ConcurrentBag<IDbConnectionFactory>();
                var resolver = new AppConfigDependencyResolver(appConfig);

                ExecuteInParallel(() => bag.Add(resolver.GetService<IDbConnectionFactory>()));
                
                Assert.Equal(20, bag.Count);
                Assert.True(bag.All(c => resolver.GetService<IDbConnectionFactory>() == c));
            }
        }
        public void GetService_caches_the_fact_that_no_provider_is_registered()
        {
            var mockProviders = new Mock<ProviderConfig>();
            mockProviders.Setup(m => m.TryGetDbProviderServices("Ask.Rhod.Gilbert")).Returns((DbProviderServices)null);
            var mockConfig = new Mock<AppConfig>(new ConnectionStringSettingsCollection());
            mockConfig.Setup(m => m.Providers).Returns(mockProviders.Object);

            var resolver = new AppConfigDependencyResolver(mockConfig.Object);

            Assert.Null(resolver.GetService<DbProviderServices>("Ask.Rhod.Gilbert"));
            mockProviders.Verify(m => m.TryGetDbProviderServices("Ask.Rhod.Gilbert"), Times.Once());
            Assert.Null(resolver.GetService<DbProviderServices>("Ask.Rhod.Gilbert"));
            mockProviders.Verify(m => m.TryGetDbProviderServices("Ask.Rhod.Gilbert"), Times.Once());
        }
        public void GetService_caches_the_fact_that_no_connection_factory_is_set()
        {
            var mockConfig = new Mock<AppConfig>(new ConnectionStringSettingsCollection());
            mockConfig.Setup(m => m.TryGetDefaultConnectionFactory()).Returns((IDbConnectionFactory)null);
            var resolver = new AppConfigDependencyResolver(mockConfig.Object);

            Assert.Null(resolver.GetService<IDbConnectionFactory>());
            mockConfig.Verify(m => m.TryGetDefaultConnectionFactory(), Times.Once());
            Assert.Null(resolver.GetService<IDbConnectionFactory>());
            mockConfig.Verify(m => m.TryGetDefaultConnectionFactory(), Times.Once());
        }
        public void GetService_caches_connection_factory()
        {
            var mockConfig = new Mock<AppConfig>(new ConnectionStringSettingsCollection());
            mockConfig.Setup(m => m.TryGetDefaultConnectionFactory()).Returns(new FakeConnectionFactory());
            var resolver = new AppConfigDependencyResolver(mockConfig.Object);

            var factoryInstance = resolver.GetService<IDbConnectionFactory>();

            Assert.NotNull(factoryInstance);
            mockConfig.Verify(m => m.TryGetDefaultConnectionFactory(), Times.Once());
            Assert.Same(factoryInstance, resolver.GetService<IDbConnectionFactory>());
            mockConfig.Verify(m => m.TryGetDefaultConnectionFactory(), Times.Once());
        }
        public void GetService_caches_the_fact_that_no_Migrations_SQL_generator_is_registered()
        {
            var mockProviders = new Mock<ProviderConfig>();
            mockProviders.Setup(m => m.TryGetMigrationSqlGeneratorFactory("Ask.Rhod.Gilbert"))
                .Returns((Func<MigrationSqlGenerator>)(() => null));
            
            var mockConfig = new Mock<AppConfig>(new ConnectionStringSettingsCollection());
            mockConfig.Setup(m => m.Providers).Returns(mockProviders.Object);

            var resolver = new AppConfigDependencyResolver(mockConfig.Object);

            Assert.Null(resolver.GetService<MigrationSqlGenerator>("Ask.Rhod.Gilbert"));
            mockProviders.Verify(m => m.TryGetMigrationSqlGeneratorFactory("Ask.Rhod.Gilbert"), Times.Once());
            Assert.Null(resolver.GetService<MigrationSqlGenerator>("Ask.Rhod.Gilbert"));
            mockProviders.Verify(m => m.TryGetMigrationSqlGeneratorFactory("Ask.Rhod.Gilbert"), Times.Once());
        }
        public void GetService_caches_Migrations_SQL_generator_and_uses_it_to_return_a_new_instance_every_call()
        {
            var mockProviders = new Mock<ProviderConfig>();
            mockProviders.Setup(m => m.TryGetMigrationSqlGeneratorFactory("Ask.Rhod.Gilbert"))
                .Returns(() => new Mock<MigrationSqlGenerator>().Object);
            
            var mockConfig = new Mock<AppConfig>(new ConnectionStringSettingsCollection());
            mockConfig.Setup(m => m.Providers).Returns(mockProviders.Object);

            var resolver = new AppConfigDependencyResolver(mockConfig.Object);

            var migrationSqlGenerator1 = resolver.GetService<MigrationSqlGenerator>("Ask.Rhod.Gilbert");
            Assert.NotNull(migrationSqlGenerator1);
            mockProviders.Verify(m => m.TryGetMigrationSqlGeneratorFactory("Ask.Rhod.Gilbert"), Times.Once());

            var migrationSqlGenerator2 = resolver.GetService<MigrationSqlGenerator>("Ask.Rhod.Gilbert");
            Assert.NotNull(migrationSqlGenerator2);
            Assert.NotSame(migrationSqlGenerator1, migrationSqlGenerator2);
            mockProviders.Verify(m => m.TryGetMigrationSqlGeneratorFactory("Ask.Rhod.Gilbert"), Times.Once());
        }