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]);
            }
Пример #3
0
        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);
        }
Пример #4
0
 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);
            }
Пример #6
0
 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)));
                }
            }
Пример #11
0
        /// <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)));
                }
            }
Пример #13
0
            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);
            }
Пример #17
0
            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>());
            }
Пример #18
0
            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>());
            }