public void The_root_resolver_resolves_from_secondary_resolvers_and_roots() { var attributeProvider1 = new Mock <AttributeProvider>().Object; var attributeProvider2 = new Mock <AttributeProvider>().Object; var mockSecondaryResolver1 = new Mock <IDbDependencyResolver>(); mockSecondaryResolver1.Setup(m => m.GetServices(typeof(AttributeProvider), null)).Returns(new object[] { attributeProvider1 }); var mockSecondaryResolver2 = new Mock <IDbDependencyResolver>(); mockSecondaryResolver2.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.AddSecondaryResolver(mockSecondaryResolver1.Object); rootResolver.AddSecondaryResolver(mockSecondaryResolver2.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 AddSecondaryResolver(IDbDependencyResolver resolver) { DebugCheck.NotNull(resolver); // Secondary resolvers only kick in if nothing else before the root resolves the dependency. _rootResolver.AddSecondaryResolver(resolver); }
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.AddSecondaryResolver(new SingletonDependencyResolver <AttributeProvider>(new AttributeProvider())); resolver.AddSecondaryResolver(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_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 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.AddSecondaryResolver(new SingletonDependencyResolver<AttributeProvider>(new AttributeProvider())); resolver.AddSecondaryResolver(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_resolves_from_secondary_resolvers_and_roots() { var attributeProvider1 = new Mock<AttributeProvider>().Object; var attributeProvider2 = new Mock<AttributeProvider>().Object; var mockSecondaryResolver1 = new Mock<IDbDependencyResolver>(); mockSecondaryResolver1.Setup(m => m.GetServices(typeof(AttributeProvider), null)).Returns(new object[] { attributeProvider1 }); var mockSecondaryResolver2 = new Mock<IDbDependencyResolver>(); mockSecondaryResolver2.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.AddSecondaryResolver(mockSecondaryResolver1.Object); rootResolver.AddSecondaryResolver(mockSecondaryResolver2.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_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>()); }