public void GetService_returns_null_when_contract_type_does_not_match()
        {
            var resolver = new WrappingDependencyResolver<IPilkington>(
                new Mock<IDbDependencyResolver>().Object,
                (s, k) =>
                    {
                        Assert.True(false);
                        return s;
                    });

            Assert.Null(resolver.GetService<Random>());
        }
        public void GetService_wraps_service_and_returns_wrapped_service()
        {
            var originalService = new Mock<IPilkington>().Object;
            var wrappedService = new Mock<IPilkington>().Object;

            var snapshot = new Mock<IDbDependencyResolver>();
            snapshot.Setup(m => m.GetService(typeof(IPilkington), "Foo")).Returns(originalService);

            var resolver = new WrappingDependencyResolver<IPilkington>(
                snapshot.Object,
                (s, k) =>
                    {
                        Assert.Same(originalService, s);
                        Assert.Equal("Foo", k);
                        return wrappedService;
                    });

            Assert.Same(wrappedService, resolver.GetService<IPilkington>("Foo"));
            snapshot.Verify(m => m.GetService(typeof(IPilkington), "Foo"));
        }
            public void GetServices_wraps_service_and_returns_wrapped_services()
            {
                var originalService1 = new Mock<IPilkington>().Object;
                var wrappedService1 = new Mock<IPilkington>().Object;
                var originalService2 = new Mock<IPilkington>().Object;
                var wrappedService2 = new Mock<IPilkington>().Object;

                var snapshot = new Mock<IDbDependencyResolver>();
                snapshot.Setup(m => m.GetServices(typeof(IPilkington), "Foo"))
                    .Returns(new object[] { originalService1, originalService2 });

                var resolver = new WrappingDependencyResolver<IPilkington>(
                    snapshot.Object,
                    (s, k) =>
                        {
                            Assert.Equal("Foo", k);
                            return s == originalService1 ? wrappedService1 : s == originalService2 ? wrappedService2 : null;
                        });

                var pilkingtons = resolver.GetServices<IPilkington>("Foo").ToList();

                Assert.Equal(2, pilkingtons.Count);
                Assert.Same(wrappedService1, pilkingtons[0]);
                Assert.Same(wrappedService2, pilkingtons[1]);
                snapshot.Verify(m => m.GetServices(typeof(IPilkington), "Foo"));
            }