public void GetServices_returns_empty_list_if_no_resolver_in_the_chain_resolves_the_dependency()
            {
                var mockResolver1 = CreateMockResolver("Steve", new Mock <IPilkington>().Object);
                var mockResolver2 = CreateMockResolver("Ricky", new Mock <IPilkington>().Object);

                var chain = new ResolverChain();

                chain.Add(mockResolver1.Object);
                chain.Add(mockResolver2.Object);

                Assert.Empty(chain.GetServices <IPilkington>("Karl"));

                mockResolver1.Verify(m => m.GetServices(typeof(IPilkington), "Karl"), Times.Once());
                mockResolver2.Verify(m => m.GetServices(typeof(IPilkington), "Karl"), Times.Once());
            }
            public void GetServices_and_Add_can_be_accessed_from_multiple_threads_concurrently()
            {
                for (var i = 0; i < 30; i++)
                {
                    var bag      = new ConcurrentBag <IPilkington>();
                    var resolver = new ResolverChain();
                    var karl     = new Karl();

                    ExecuteInParallel(
                        () =>
                    {
                        resolver.Add(new SingletonDependencyResolver <IPilkington>(karl, "Karl"));
                        resolver.GetServices <IPilkington>("Karl").Each(bag.Add);
                    });

                    Assert.True(bag.Count >= 20);
                    Assert.True(bag.All(c => karl == c));
                }
            }
            public void GetServices_returns_all_the_services_that_match_the_given_type_and_key()
            {
                var karl1a        = new Mock <IPilkington>().Object;
                var karl1b        = new Mock <IPilkington>().Object;
                var mockResolver1 = new Mock <IDbDependencyResolver>();

                mockResolver1
                .Setup(m => m.GetServices(typeof(IPilkington), "Karl"))
                .Returns(new object[] { karl1a, karl1b });

                var karl2a        = new Mock <IPilkington>().Object;
                var karl2b        = new Mock <IPilkington>().Object;
                var mockResolver2 = new Mock <IDbDependencyResolver>();

                mockResolver2
                .Setup(m => m.GetServices(typeof(IPilkington), "Karl"))
                .Returns(new object[] { karl2a, karl2b });

                var mockResolver3 = CreateMockResolver("Ricky", new Mock <IPilkington>().Object);

                var chain = new ResolverChain();

                chain.Add(mockResolver1.Object);
                chain.Add(mockResolver2.Object);
                chain.Add(mockResolver3.Object);

                var pilkingtons = chain.GetServices <IPilkington>("Karl").ToList();

                Assert.Equal(4, pilkingtons.Count);
                Assert.Same(karl2a, pilkingtons[0]);
                Assert.Same(karl2b, pilkingtons[1]);
                Assert.Same(karl1a, pilkingtons[2]);
                Assert.Same(karl1b, pilkingtons[3]);

                mockResolver1.Verify(m => m.GetServices(typeof(IPilkington), "Karl"), Times.Once());
                mockResolver2.Verify(m => m.GetServices(typeof(IPilkington), "Karl"), Times.Once());
                mockResolver3.Verify(m => m.GetServices(typeof(IPilkington), "Karl"), Times.Once());
            }
예제 #4
0
 public IEnumerable <object> GetServices(Type type, object key)
 {
     return(_defaultResolvers.GetServices(type, key).Concat(_resolvers.GetServices(type, key)));
 }