Ejemplo n.º 1
0
 public void ChildContainerShouldBeDisposed()
 {
     var ioc = new ServiceContainer();
       var childContainer = ioc.CreateChildContainer();
       ioc.Dispose();
       Assert.That(() => childContainer.Clear(), Throws.TypeOf(typeof(ObjectDisposedException)));
 }
Ejemplo n.º 2
0
        public void ChildContainerShouldBeDisposed()
        {
            var ioc            = new ServiceContainer();
            var childContainer = ioc.CreateChildContainer();

            ioc.Dispose();
            Assert.That(() => childContainer.Clear(), Throws.TypeOf(typeof(ObjectDisposedException)));
        }
Ejemplo n.º 3
0
        public void CreateChildContainer()
        {
            var ioc = new ServiceContainer();

            Assert.AreSame(ioc, ioc.Cast <object>().First());

            var childContainer = ioc.CreateChildContainer();

            Assert.AreSame(childContainer, childContainer.Cast <object>().First());
        }
Ejemplo n.º 4
0
        public void ComplexHierarchy()
        {
            // Build hierarchy.
            var root   = new ServiceContainer();
            var child1 = root.CreateChildContainer();

            child1.Register(typeof(IService1), "token1", typeof(Service1), CreationPolicy.Shared);

            // Register root services after child1 is created to see whether new services
            // are properly inherited.
            root.Register(typeof(IService1), null, typeof(Service1), CreationPolicy.Shared);
            root.Register(typeof(IService2), null, typeof(Service2), CreationPolicy.LocalShared);
            root.Register(typeof(IService3), null, typeof(Service3), CreationPolicy.NonShared);

            var child2 = child1.CreateChildContainer();

            child2.Register(typeof(IService1), null, typeof(Service1), CreationPolicy.Shared);
            child2.Register(typeof(IService1), "token2", typeof(DisposableService), CreationPolicy.Shared);

            // Resolve services.
            var service1InChild2          = child2.GetInstance <IService1>();
            var service2InChild2          = child2.GetInstance <IService2>();
            var service3InChild2          = child2.GetInstance <IService3>();
            var disposableServiceInChild2 = child2.GetInstance <IService1>("token2");

            var service3InChild1      = child1.GetInstance <IService3>();
            var service2InChild1      = child1.GetInstance <IService2>();
            var service1InChild1      = child1.GetInstance <IService1>();
            var namedService1InChild1 = child1.GetInstance <IService1>("token1");
            var namedService1InChild2 = child2.GetInstance <IService1>("token1");

            var service1InRoot = root.GetInstance <IService1>();
            var service3InRoot = root.GetInstance <IService3>();
            var service2InRoot = root.GetInstance <IService2>();

            // Check root services.
            Assert.IsNotNull(service1InRoot);
            Assert.IsNotNull(service2InRoot);
            Assert.IsNotNull(service3InRoot);
            Assert.IsNull(root.GetInstance <IService1>("token1"));
            Assert.AreSame(root, root.GetInstance <ServiceContainer>());
            Assert.AreSame(service1InRoot, root.GetInstance <IService1>());
            Assert.AreSame(service2InRoot, root.GetInstance <IService2>());
            Assert.AreNotSame(service3InRoot, root.GetInstance <IService3>());
            Assert.AreSame(service1InRoot, service3InRoot.Service1);
            Assert.AreSame(service2InRoot, service3InRoot.Service2);

            Assert.IsNull(service2InRoot.Service1);
            root.ResolveProperties(service2InRoot);
            Assert.AreSame(service1InRoot, service2InRoot.Service1);

            // Check child1 services.
            Assert.IsNotNull(service1InChild1);
            Assert.IsNotNull(service2InChild1);
            Assert.IsNotNull(service3InChild1);
            Assert.IsNotNull(namedService1InChild1);
            Assert.AreSame(child1, child1.GetInstance <ServiceContainer>());
            Assert.AreSame(service1InChild1, child1.GetInstance <IService1>());
            Assert.AreSame(service2InChild1, child1.GetInstance <IService2>());
            Assert.AreNotSame(service3InChild1, child1.GetInstance <IService3>());
            Assert.AreSame(service1InChild1, service3InChild1.Service1);
            Assert.AreSame(service2InChild1, service3InChild1.Service2);

            Assert.IsNull(service2InChild1.Service1);
            child1.ResolveProperties(service2InChild1);
            Assert.AreSame(service1InChild1, service2InChild1.Service1);

            Assert.AreSame(service1InRoot, service1InChild1);
            Assert.AreNotSame(service2InRoot, service2InChild1);

            // Check child2 services.
            Assert.IsNotNull(service1InChild2);
            Assert.IsNotNull(service2InChild2);
            Assert.IsNotNull(service3InChild2);
            Assert.IsNotNull(namedService1InChild2);
            Assert.IsNotNull(disposableServiceInChild2);
            Assert.AreSame(child2, child2.GetInstance <ServiceContainer>());
            Assert.AreSame(service1InChild2, child2.GetInstance <IService1>());
            Assert.AreSame(service2InChild2, child2.GetInstance <IService2>());
            Assert.AreNotSame(service3InChild2, child2.GetInstance <IService3>());
            Assert.AreSame(service1InChild2, service3InChild2.Service1);
            Assert.AreSame(service2InChild2, service3InChild2.Service2);

            Assert.IsNull(service2InChild2.Service1);
            child2.ResolveProperties(service2InChild2);
            Assert.AreSame(service1InChild2, service2InChild2.Service1);

            Assert.AreNotSame(service1InRoot, service1InChild2);
            Assert.AreNotSame(service1InChild1, service1InChild2);
            Assert.AreNotSame(service2InRoot, service2InChild2);
            Assert.AreNotSame(service2InChild1, service2InChild2);

            Assert.AreSame(child1.GetInstance <IService1>("token1"), child2.GetInstance <IService1>("token1"));
            Assert.AreSame(disposableServiceInChild2, child2.GetInstance <IService1>("token2"));

            var service1InstancesInChild2 = child2.GetAllInstances <IService1>().ToArray();

            Assert.AreEqual(2, service1InstancesInChild2.Length);
            Assert.IsTrue(service1InstancesInChild2.Contains(namedService1InChild1));
            Assert.IsTrue(service1InstancesInChild2.Contains(disposableServiceInChild2));

            // Unregister local entry.
            child2.Unregister(typeof(IService1));
            Assert.AreSame(service1InRoot, child2.GetInstance <IService1>());

            // Dispose hierarchy.
            root.Dispose();
            Assert.IsTrue(((DisposableService)disposableServiceInChild2).Disposed);
        }
Ejemplo n.º 5
0
        public void ComplexHierarchy()
        {
            // Build hierarchy.
              var root = new ServiceContainer();
              var child1 = root.CreateChildContainer();
              child1.Register(typeof(IService1), "token1", typeof(Service1), CreationPolicy.Shared);

              // Register root services after child1 is created to see whether new services
              // are properly inherited.
              root.Register(typeof(IService1), null, typeof(Service1), CreationPolicy.Shared);
              root.Register(typeof(IService2), null, typeof(Service2), CreationPolicy.LocalShared);
              root.Register(typeof(IService3), null, typeof(Service3), CreationPolicy.NonShared);

              var child2 = child1.CreateChildContainer();
              child2.Register(typeof(IService1), null, typeof(Service1), CreationPolicy.Shared);
              child2.Register(typeof(IService1), "token2", typeof(DisposableService), CreationPolicy.Shared);

              // Resolve services.
              var service1InChild2 = child2.GetInstance<IService1>();
              var service2InChild2 = child2.GetInstance<IService2>();
              var service3InChild2 = child2.GetInstance<IService3>();
              var disposableServiceInChild2 = child2.GetInstance<IService1>("token2");

              var service3InChild1 = child1.GetInstance<IService3>();
              var service2InChild1 = child1.GetInstance<IService2>();
              var service1InChild1 = child1.GetInstance<IService1>();
              var namedService1InChild1 = child1.GetInstance<IService1>("token1");
              var namedService1InChild2 = child2.GetInstance<IService1>("token1");

              var service1InRoot = root.GetInstance<IService1>();
              var service3InRoot = root.GetInstance<IService3>();
              var service2InRoot = root.GetInstance<IService2>();

              // Check root services.
              Assert.IsNotNull(service1InRoot);
              Assert.IsNotNull(service2InRoot);
              Assert.IsNotNull(service3InRoot);
              Assert.IsNull(root.GetInstance<IService1>("token1"));
              Assert.AreSame(root, root.GetInstance<ServiceContainer>());
              Assert.AreSame(service1InRoot, root.GetInstance<IService1>());
              Assert.AreSame(service2InRoot, root.GetInstance<IService2>());
              Assert.AreNotSame(service3InRoot, root.GetInstance<IService3>());
              Assert.AreSame(service1InRoot, service3InRoot.Service1);
              Assert.AreSame(service2InRoot, service3InRoot.Service2);

              Assert.IsNull(service2InRoot.Service1);
              root.ResolveProperties(service2InRoot);
              Assert.AreSame(service1InRoot, service2InRoot.Service1);

              // Check child1 services.
              Assert.IsNotNull(service1InChild1);
              Assert.IsNotNull(service2InChild1);
              Assert.IsNotNull(service3InChild1);
              Assert.IsNotNull(namedService1InChild1);
              Assert.AreSame(child1, child1.GetInstance<ServiceContainer>());
              Assert.AreSame(service1InChild1, child1.GetInstance<IService1>());
              Assert.AreSame(service2InChild1, child1.GetInstance<IService2>());
              Assert.AreNotSame(service3InChild1, child1.GetInstance<IService3>());
              Assert.AreSame(service1InChild1, service3InChild1.Service1);
              Assert.AreSame(service2InChild1, service3InChild1.Service2);

              Assert.IsNull(service2InChild1.Service1);
              child1.ResolveProperties(service2InChild1);
              Assert.AreSame(service1InChild1, service2InChild1.Service1);

              Assert.AreSame(service1InRoot, service1InChild1);
              Assert.AreNotSame(service2InRoot, service2InChild1);

              // Check child2 services.
              Assert.IsNotNull(service1InChild2);
              Assert.IsNotNull(service2InChild2);
              Assert.IsNotNull(service3InChild2);
              Assert.IsNotNull(namedService1InChild2);
              Assert.IsNotNull(disposableServiceInChild2);
              Assert.AreSame(child2, child2.GetInstance<ServiceContainer>());
              Assert.AreSame(service1InChild2, child2.GetInstance<IService1>());
              Assert.AreSame(service2InChild2, child2.GetInstance<IService2>());
              Assert.AreNotSame(service3InChild2, child2.GetInstance<IService3>());
              Assert.AreSame(service1InChild2, service3InChild2.Service1);
              Assert.AreSame(service2InChild2, service3InChild2.Service2);

              Assert.IsNull(service2InChild2.Service1);
              child2.ResolveProperties(service2InChild2);
              Assert.AreSame(service1InChild2, service2InChild2.Service1);

              Assert.AreNotSame(service1InRoot, service1InChild2);
              Assert.AreNotSame(service1InChild1, service1InChild2);
              Assert.AreNotSame(service2InRoot, service2InChild2);
              Assert.AreNotSame(service2InChild1, service2InChild2);

              Assert.AreSame(child1.GetInstance<IService1>("token1"), child2.GetInstance<IService1>("token1"));
              Assert.AreSame(disposableServiceInChild2, child2.GetInstance<IService1>("token2"));

              var service1InstancesInChild2 = child2.GetAllInstances<IService1>().ToArray();
              Assert.AreEqual(2, service1InstancesInChild2.Length);
              Assert.IsTrue(service1InstancesInChild2.Contains(namedService1InChild1));
              Assert.IsTrue(service1InstancesInChild2.Contains(disposableServiceInChild2));

              // Unregister local entry.
              child2.Unregister(typeof(IService1));
              Assert.AreSame(service1InRoot, child2.GetInstance<IService1>());

              // Dispose hierarchy.
              root.Dispose();
              Assert.IsTrue(((DisposableService)disposableServiceInChild2).Disposed);
        }
Ejemplo n.º 6
0
        public void CreateChildContainer()
        {
            var ioc = new ServiceContainer();
              Assert.AreSame(ioc, ioc.Cast<object>().First());

              var childContainer = ioc.CreateChildContainer();
              Assert.AreSame(childContainer, childContainer.Cast<object>().First());
        }