예제 #1
0
        public void Resolve_UsingAutoFactoryOfInterface_ThrowsRegistrationException() {
            var container = new NCopContainer(registry => {
                registry.Register<IFoo>();
            });

            var instance = container.Resolve<IFoo>();
        }
예제 #2
0
        public void TryResolve_NotRegisteredServiceWithMultipuleArguments_DontThrowsRegistrationExceptionAndReturnsNull()
        {
            var container = new NCopContainer(registry => { });
            var instance  = container.TryResolve <string, int, IFoo>("NCop", 9);

            Assert.IsNull(instance);
        }
예제 #3
0
        public void TryResolve_NotRegisteredService_DontThrowsRegistrationExceptionAndReturnsNull()
        {
            var container = new NCopContainer(registry => { });
            var instance  = container.TryResolve <IFoo>();

            Assert.IsNull(instance);
        }
예제 #4
0
        public void Resolve_UsingAsPerHttpRequestExpressionRegistrationWhenThereIsNoHttpContext_ThrowsLifetimeStragtegyException()
        {
            var container = new NCopContainer(registry => {
                registry.Register <Foo>().AsSingleton().PerHttpRequest();
            });

            container.Resolve <Foo>();
        }
예제 #5
0
        public void Resolve_UsingAutoFactoryOfInterface_ThrowsRegistrationException()
        {
            var container = new NCopContainer(registry => {
                registry.Register <IFoo>();
            });

            var instance = container.Resolve <IFoo>();
        }
예제 #6
0
        public void ResolveOfDependetType_UsingFactoryThatCallsResolveOfDependencyObject_ReturnsTheResolvedInstance() {
            var container = new NCopContainer(registry => {
                registry.Register<Foo>();
                registry.Register<IBar>(r => new Bar(r.Resolve<Foo>()));
            });

            Assert.IsNotNull(container.Resolve<IBar>());
        }
예제 #7
0
        public void Resolve_UsingAutoFactoryOfInterfaceThatBindsToSelf_ThrowsRegistrationException()
        {
            var container = new NCopContainer(registry => {
                registry.Register <IFoo>().ToSelf();
            });

            container.Resolve <IFoo>();
        }
예제 #8
0
        public void Resolve_UsingAutoFactoryAndCastingUsingTheAsExpresion_ReturnsTheResolvedInstance() {
            var container = new NCopContainer(registry => {
                registry.Register<IFoo>().From<Foo>();
            });

            var instance = container.Resolve<IFoo>();

            Assert.IsNotNull(instance);
        }
예제 #9
0
        public void ResolveOfDependetType_UsingFactoryThatCallsResolveOfDependencyObject_ReturnsTheResolvedInstance()
        {
            var container = new NCopContainer(registry => {
                registry.Register <Foo>();
                registry.Register <IBar>((r) => new Bar(r.Resolve <Foo>()));
            });

            Assert.IsNotNull(container.Resolve <IBar>());
        }
예제 #10
0
        public void AutoRegister_OfTypeThatHasMoreThanOneConstructorAndWithoutDependencyAttribute_ThrowsRegistrationException()
        {
            var container = new NCopContainer(registry => {
                registry.Register <IFoo>().As <Foo>();
                registry.RegisterAuto <AmbiguousConstructor>();
            });

            var instance = container.Resolve <AmbiguousConstructor>();
        }
예제 #11
0
        public void Resolve_UsingFactoryWithTypedArgument_ReturnsTheResolvedInstanceThatHoldsTheResultOfTypedArgument() {
            var container = new NCopContainer(registry => {
                registry.Register<IFoo, string>((r, name) => new Foo(name));
            });

            var instance = container.Resolve<string, IFoo>("Test");

            Assert.IsNotNull(instance);
            Assert.AreEqual(instance.Name, "Test");
        }
예제 #12
0
        public void Resolve_UsingAsSingletonExpressionRegistrationWithAutoFactory_ReturnsTheSameObjectForDifferentResolveCalls() {
            var container = new NCopContainer(registry => {
                registry.Register<Foo>().AsSingleton();
            });

            var instance = container.Resolve<Foo>();
            var instatance2 = container.Resolve<Foo>();

            Assert.AreSame(instance, instatance2);
        }
예제 #13
0
        public void Resolve_UsingAutoFactoryAndCastingUsingTheAsExpresion_ReturnsTheResolvedInstance()
        {
            var container = new NCopContainer(registry => {
                registry.Register <IFoo>().As <Foo>();
            });

            var instance = container.Resolve <IFoo>();

            Assert.IsNotNull(instance);
        }
예제 #14
0
        public void Resolve_UsingAutoFactoryAndCastingWithAsExpressionAndAfterThatUsingTheAsSingletonExpressionRegistration_ReturnsTheSameObjectForDifferentResolveCalls()
        {
            var container = new NCopContainer(registry => {
                registry.Register <IFoo>().As <Foo>().AsSingleton();
            });

            var instance    = container.Resolve <IFoo>();
            var instatance2 = container.Resolve <IFoo>();

            Assert.AreSame(instance, instatance2);
        }
예제 #15
0
        public void Resolve_InChildContainerUsesParentContainer_ReusesParentContainerAndReturnsTheReolvedObject()
        {
            var container = new NCopContainer(registry => {
                registry.Register <Foo>();
            });

            var childContainer = container.CreateChildContainer(registry => { });
            var instance       = childContainer.Resolve <Foo>();

            Assert.IsNotNull(instance);
        }
예제 #16
0
        public void Resolve_UsingAsSingletonExpressionRegistrationWithFactory_ReturnsTheSameObjectForDifferentResolveCalls()
        {
            var container = new NCopContainer(registry => {
                registry.Register <Foo>((reg) => new Foo()).AsSingleton();
            });

            var instance    = container.Resolve <Foo>();
            var instatance2 = container.Resolve <Foo>();

            Assert.AreSame(instance, instatance2);
        }
예제 #17
0
        public void AutoRegister_WithPropertyDependency_ReturnsTheResolvedInstanceFilledWithTheAutoResolvedProperty()
        {
            var container = new NCopContainer(registry => {
                registry.Register <IFoo>().As <Foo>();
                registry.RegisterAuto <PropertyDependency>();
            });

            var instance = container.Resolve <PropertyDependency>();

            Assert.IsNotNull(instance.Foo);
        }
예제 #18
0
        public void AutoRegister_WithConstructorDependencyThatHasOneDependentArgument_ReturnsTheResolvedInstanceFilledWithTheDependentArgument()
        {
            var container = new NCopContainer(registry => {
                registry.Register <IFoo>().As <Foo>();
                registry.RegisterAuto <CtorDependency>();
            });

            var instance = container.Resolve <CtorDependency>();

            Assert.IsNotNull(instance.Foo);
        }
예제 #19
0
        public void Resolve_UsingFactoryWithTypedArgument_ReturnsTheResolvedInstanceThatHoldsTheResultOfTypedArgument()
        {
            var container = new NCopContainer(registry => {
                registry.Register <IFoo, string>((r, name) => new Foo(name));
            });

            var instance = container.Resolve <string, IFoo>("Test");

            Assert.IsNotNull(instance);
            Assert.AreEqual(instance.Name, "Test");
        }
예제 #20
0
        public void Resolve_UsingNamedExpressionOfSpecificTypeAndAutoWithoutNameOfTheSameType_ReturnsDifferentInstancesOfTheSameType() {
            var container = new NCopContainer(registry => {
                registry.Register<Foo>().Named("NCop");
                registry.Register<Foo>();
            });

            var instance = container.Resolve<Foo>();
            var namedInstance = container.ResolveNamed<Foo>("NCop");

            Assert.AreNotSame(namedInstance, instance);
        }
예제 #21
0
        public void Resolve_UsingAutoFactoryThatBindsToSelf_ReturnsTheResolvedInstance()
        {
            var container = new NCopContainer(registry => {
                registry.Register <Foo>().ToSelf();
            });

            var instance = container.Resolve <Foo>();

            Assert.IsNotNull(instance);
            Assert.IsInstanceOfType(instance, typeof(Foo));
        }
예제 #22
0
        public void Resolve_UsingNamedExpressionOfSpecificTypeAndAutoWithoutNameOfTheSameType_ReturnsDifferentInstancesOfTheSameType()
        {
            var container = new NCopContainer(registry => {
                registry.Register <Foo>().Named("NCop");
                registry.Register <Foo>();
            });

            var instance      = container.Resolve <Foo>();
            var namedInstance = container.ResolveNamed <Foo>("NCop");

            Assert.AreNotSame(namedInstance, instance);
        }
예제 #23
0
        public void AutoRegister_OfTypeThatHasTwoDependentPropertiesThatOneOfThemIsAnnotatedWithIgnoreDependency_ReturnsResolvedInstanceWithOnlyOneDependentProperty()
        {
            var container = new NCopContainer(registry => {
                registry.Register <IFoo>().As <Foo>();
                registry.RegisterAuto <IgnoreDependencyClass>();
            });

            var instance = container.Resolve <IgnoreDependencyClass>();

            Assert.IsNotNull(instance.Injected);
            Assert.IsNull(instance.Ignored);
        }
예제 #24
0
        public void AutoRegister_OfInterfaceAndCastingWithAsExpressionToConcreteTypeThatHasOneDependentProperty_ReturnsResolvedInstanceWithFilledProperty()
        {
            var container = new NCopContainer(registry => {
                registry.Register <Baz>().ToSelf();
                registry.RegisterAuto <IFoo>().As <Boo>();
            });

            var instance = container.Resolve <IFoo>() as Boo;

            Assert.IsNotNull(instance);
            Assert.IsNotNull(instance.Baz);
        }
예제 #25
0
        public void ResolveInChildContainerAndInParentContainer_UsingAutoRegistrationInParentContainerAsSingletonReusedWithinContainer_ReturnsTheSameInstance()
        {
            var container = new NCopContainer(registry => {
                registry.Register <Foo>().AsSingleton().ReusedWithinHierarchy();
            });

            var childContainer = container.CreateChildContainer(registry => { });
            var instance       = container.Resolve <Foo>();
            var instance2      = childContainer.Resolve <Foo>();

            Assert.AreSame(instance, instance2);
        }
예제 #26
0
        public void DisposeOfContainer_OfDisposableObjectWhichIsOwnedExternally_ReturnsNotDispsoedIndication()
        {
            var container = new NCopContainer(registry => {
                registry.Register <Foo>().OwnedExternally();
            });

            var instance = container.Resolve <Foo>();

            Assert.IsFalse(instance.IsDisposed);
            container.Dispose();
            Assert.IsFalse(instance.IsDisposed);
        }
예제 #27
0
        public void AutoRegister_OfTypeThatHasMoreThanOneConstructorWithDependencyAttribute_ReturnsResolvedInstanceAndDontThrowsRegistrationException()
        {
            var container = new NCopContainer(registry => {
                registry.Register <IFoo>().As <Foo>();
                registry.RegisterAuto <AmbiguousConstructorFixedWithDependencyAttribute>();
            });

            var instance = container.Resolve <AmbiguousConstructorFixedWithDependencyAttribute>();

            Assert.IsNotNull(instance);
            Assert.IsNotNull(instance.Foo);
        }
예제 #28
0
        public void AutoRegister_OfTypeThatHasTwoPropertiesThatOneOfThemIsDependentAndTheOtherFilledByDependentConstructor_ReturnsResolvedInstanceWithBothPropertiesFilled()
        {
            var container = new NCopContainer(registry => {
                registry.Register <IFoo>().As <Foo>().AsSingleton();
                registry.RegisterAuto <Bar>();
            });

            var instance = container.Resolve <Bar>();

            Assert.IsNotNull(instance.ByCtor);
            Assert.IsNotNull(instance.ByProperty);
            Assert.AreSame(instance.ByCtor, instance.ByProperty);
        }
예제 #29
0
        public void Resolve_UsingAsPerHttpRequestExpressionRegistrationWhenUsingTwoDiffrentContext_ReturnsDiffrentInstancesPerHttpContextInstance()
        {
            Foo foo       = null;
            var container = new NCopContainer(registry => {
                registry.Register <Foo>().AsSingleton().PerHttpRequest();
            });

            SetHttpContext();
            foo = container.Resolve <Foo>();
            Assert.AreEqual(foo, container.Resolve <Foo>());
            SetHttpContext();
            Assert.AreNotEqual(foo, container.Resolve <Foo>());
        }
예제 #30
0
        public void DisposeOfParentContainer_OfDisposableObjectWhichIsOwnedByChildContainer_ReturnsDispsoedIndication()
        {
            var parentContainer = new NCopContainer(registry => {
            });

            var childContainer = parentContainer.CreateChildContainer(registry => {
                registry.Register <Foo>();
            });

            var instance = childContainer.Resolve <Foo>();

            Assert.IsFalse(instance.IsDisposed);
            parentContainer.Dispose();
            Assert.IsFalse(instance.IsDisposed);
        }
예제 #31
0
        public void DisposeOfContainer_OfDisposableNamedObjectWithAnArgumentWhichIsOwnedExternally_ReturnsTheNamedInstanceWithNotDispsoedIndication()
        {
            var container = new NCopContainer(registry => {
                registry.Register <IFoo, string>((c, name) => new Foo(name))
                .Named("NCop")
                .OwnedExternally();
            });

            var instance = container.TryResolve <string, IFoo>("NCop", "NCop") as Foo;

            container.Dispose();

            Assert.IsNotNull(instance);
            Assert.IsTrue(instance.Name.Equals("NCop"));
            Assert.IsFalse(instance.IsDisposed);
        }
예제 #32
0
        public async Task Resolve_UsingAsPerThreadSingletonExpressionRegistrationWithAutoFactory_ReturnsDiffrentOjectsForDiffrentThreadsAndTheSameObjectForDifferentResolveCallsOnTheSameThread()
        {
            Foo foo1 = null;
            Foo foo2 = null;

            var container = new NCopContainer(registry => {
                registry.Register <Foo>().AsSingleton().PerThread();
            });

            foo1 = await Task.Factory.StartNew(() => container.Resolve <Foo>());

            foo2 = await Task.Factory.StartNew(() => container.Resolve <Foo>());

            Assert.AreNotEqual(foo1, foo2);
            Assert.AreEqual(container.Resolve <Foo>(), container.Resolve <Foo>());
        }
예제 #33
0
        public async Task Resolve_UsingAsPerHybridRequestExpressionRegistrationWhenHttpContextIsNotAvailable_ReturnsTheSameInstancePerThreadRequest()
        {
            Foo           foo       = null;
            Foo           foo2      = null;
            NCopContainer container = null;

            container = new NCopContainer(registry => {
                registry.Register <Foo>().AsSingleton().PerHybridRequest();
            });

            foo = container.Resolve <Foo>();
            Assert.AreEqual(foo, container.Resolve <Foo>());
            foo2 = await Task.Factory.StartNew(() => container.Resolve <Foo>());

            Assert.AreEqual(foo, foo2);
        }
예제 #34
0
        public void DisposeOfContainer_OfDisposableNamedObjectWithAnArgumentWhichIsOwnedExternally_ReturnsTheNamedInstanceWithNotDispsoedIndication() {
            var container = new NCopContainer(registry => {
                registry.Register<IFoo, string>((c, name) => new Foo(name))
                        .Named("NCop")
                        .OwnedExternally();
            });

            var instance = container.TryResolve<string, IFoo>("NCop", "NCop") as Foo;

            container.Dispose();

            Assert.IsNotNull(instance);
            Assert.IsTrue(instance.Name.Equals("NCop"));
            Assert.IsFalse(instance.IsDisposed);
        }
예제 #35
0
        public void Resolve_UsingAsPerHttpRequestExpressionRegistrationWhenThereIsNoHttpContext_ThrowsLifetimeStragtegyException() {
            var container = new NCopContainer(registry => {
                registry.Register<Foo>().AsSingleton().PerHttpRequest();
            });

            container.Resolve<Foo>();
        }
예제 #36
0
        public void TryResolve_NotRegisteredServiceWithMultipuleArguments_DontThrowsRegistrationExceptionAndReturnsNull() {
            var container = new NCopContainer(registry => { });
            var instance = container.TryResolve<string, int, IFoo>("NCop", 9);

            Assert.IsNull(instance);
        }
예제 #37
0
        public void Resolve_UsingAsPerHybridRequestExpressionRegistrationWhenHttpContextIsAvailable_ReturnsDiffrentInstancesPerHttpContextInstance() {
            Foo foo = null;
            NCopContainer container = null;

            SetHttpContext();
            container = new NCopContainer(registry => {
                registry.Register<Foo>().AsSingleton().PerHybridRequest();
            });

            foo = container.Resolve<Foo>();
            Assert.AreEqual(foo, container.Resolve<Foo>());
            SetHttpContext();
            Assert.AreNotEqual(foo, container.Resolve<Foo>());
        }
예제 #38
0
        public void AutoRegister_WithConstructorDependencyThatHasOneDependentArgument_ReturnsTheResolvedInstanceFilledWithTheDependentArgument() {
            var container = new NCopContainer(registry => {
                registry.Register<IFoo>().From<Foo>();
                registry.RegisterAuto<CtorDependency>();
            });

            var instance = container.Resolve<CtorDependency>();

            Assert.IsNotNull(instance.Foo);
        }
예제 #39
0
        public void Resolve_InChildContainerUsesParentContainer_ReusesParentContainerAndReturnsTheReolvedObject() {
            var container = new NCopContainer(registry => {
                registry.Register<Foo>();
            });

            var childContainer = container.CreateChildContainer(registry => { });
            var instance = childContainer.Resolve<Foo>();

            Assert.IsNotNull(instance);
        }
예제 #40
0
        public void DisposeOfContainer_OfDisposableObjectWhichIsOwnedExternally_ReturnsNotDispsoedIndication() {
            var container = new NCopContainer(registry => {
                registry.Register<Foo>().OwnedExternally();
            });

            var instance = container.Resolve<Foo>();

            Assert.IsFalse(instance.IsDisposed);
            container.Dispose();
            Assert.IsFalse(instance.IsDisposed);
        }
예제 #41
0
        public void AutoRegister_WithPropertyDependency_ReturnsTheResolvedInstanceFilledWithTheAutoResolvedProperty() {
            var container = new NCopContainer(registry => {
                registry.Register<IFoo>().From<Foo>();
                registry.RegisterAuto<PropertyDependency>();
            });

            var instance = container.Resolve<PropertyDependency>();

            Assert.IsNotNull(instance.Foo);
        }
예제 #42
0
        public void AutoRegister_OfTypeThatHasMoreThanOneConstructorAndWithoutDependencyAttribute_ThrowsRegistrationException() {
            var container = new NCopContainer(registry => {
                registry.Register<IFoo>().From<Foo>();
                registry.RegisterAuto<AmbiguousConstructor>();
            });

            var instance = container.Resolve<AmbiguousConstructor>();
        }
예제 #43
0
 public CompositeContainerAdapter()
 {
     container = new NCopContainer();
 }
예제 #44
0
        public void Resolve_UsingAutoFactoryAndCastingWithAsExpressionAndAfterThatUsingTheAsSingletonExpressionRegistration_ReturnsTheSameObjectForDifferentResolveCalls() {
            var container = new NCopContainer(registry => {
                registry.Register<IFoo>().From<Foo>().AsSingleton();
            });

            var instance = container.Resolve<IFoo>();
            var instatance2 = container.Resolve<IFoo>();

            Assert.AreSame(instance, instatance2);
        }
예제 #45
0
        public void TryResolve_NotRegisteredService_DontThrowsRegistrationExceptionAndReturnsNull() {
            var container = new NCopContainer(registry => { });
            var instance = container.TryResolve<IFoo>();

            Assert.IsNull(instance);
        }
예제 #46
0
        public void AutoRegister_OfTypeThatHasMoreThanOneConstructorWithDependencyAttribute_ReturnsResolvedInstanceAndDontThrowsRegistrationException() {
            var container = new NCopContainer(registry => {
                registry.Register<IFoo>().From<Foo>();
                registry.RegisterAuto<AmbiguousConstructorFixedWithDependencyAttribute>();
            });

            var instance = container.Resolve<AmbiguousConstructorFixedWithDependencyAttribute>();

            Assert.IsNotNull(instance);
            Assert.IsNotNull(instance.Foo);
        }
예제 #47
0
        public void ResolveInChildContainerAndInParentContainer_UsingAutoRegistrationInParentContainerAsSingletoneReusedWithinHierarchy_ReturnsNotTheSameInstance() {
            var container = new NCopContainer(registry => {
                registry.Register<Foo>().AsSingleton().WithinContainer();
            });

            var childContainer = container.CreateChildContainer(registry => { });
            var instance1 = container.Resolve<Foo>();
            var instance2 = container.Resolve<Foo>();
            var instance3 = childContainer.Resolve<Foo>();
            var instance4 = childContainer.Resolve<Foo>();

            Assert.AreSame(instance1, instance2);
            Assert.AreNotSame(instance1, instance3);
            Assert.AreSame(instance3, instance4);
        }
예제 #48
0
        public void AutoRegister_OfInterfaceAndCastingWithAsExpressionToConcreteTypeThatHasOneDependentProperty_ReturnsResolvedInstanceWithFilledProperty() {
            var container = new NCopContainer(registry => {
                registry.Register<Baz>().ToSelf();
                registry.RegisterAuto<IFoo>().From<Boo>();
            });

            var instance = container.Resolve<IFoo>() as Boo;

            Assert.IsNotNull(instance);
            Assert.IsNotNull(instance.Baz);
        }
예제 #49
0
        public void AutoRegister_OfTypeThatHasTwoPropertiesThatOneOfThemIsDependentAndTheOtherFilledByDependentConstructor_ReturnsResolvedInstanceWithBothPropertiesFilled() {
            var container = new NCopContainer(registry => {
                registry.Register<IFoo>().From<Foo>().AsSingleton();
                registry.RegisterAuto<Bar>();
            });

            var instance = container.Resolve<Bar>();

            Assert.IsNotNull(instance.ByCtor);
            Assert.IsNotNull(instance.ByProperty);
            Assert.AreSame(instance.ByCtor, instance.ByProperty);
        }
예제 #50
0
        public async Task Resolve_UsingAsPerHybridRequestExpressionRegistrationWhenHttpContextIsNotAvailable_ReturnsTheSameInstancePerThreadRequest() {
            Foo foo = null;
            Foo foo2 = null;
            NCopContainer container = null;

            container = new NCopContainer(registry => {
                registry.Register<Foo>().AsSingleton().PerHybridRequest();
            });

            foo = container.Resolve<Foo>();
            Assert.AreEqual(foo, container.Resolve<Foo>());
            foo2 = await Task.Factory.StartNew(() => container.Resolve<Foo>());
            Assert.AreEqual(foo, foo2);
        }
예제 #51
0
 public void TryResolve_NotRegisteredService_ThrowsRegistrationException()
 {
     var container = new NCopContainer(registry => { });
     var instance  = container.Resolve <IFoo>();
 }
예제 #52
0
        public void ResolveInChildContainerAndInParentContainer_UsingSingletonRegistrationInParentContainer_ReturnsTheSameInstance() {
            var container = new NCopContainer(registry => {
                registry.Register<Foo>().AsSingleton().WithinHierarchy();
            });

            var childContainer = container.CreateChildContainer(registry => { });
            var instance = container.Resolve<Foo>();
            var instance2 = childContainer.Resolve<Foo>();

            Assert.AreSame(instance, instance2);
        }
예제 #53
0
        public void Resolve_UsingAutoFactoryOfInterfaceThatBindsToSelf_ThrowsRegistrationException() {
            var container = new NCopContainer(registry => {
                registry.Register<IFoo>().ToSelf();
            });

            container.Resolve<IFoo>();
        }
예제 #54
0
        public void Resolve_UsingAutoFactoryThatBindsToSelf_ReturnsTheResolvedInstance() {
            var container = new NCopContainer(registry => {
                registry.Register<Foo>().ToSelf();
            });

            var instance = container.Resolve<Foo>();

            Assert.IsNotNull(instance);
            Assert.IsInstanceOfType(instance, typeof(Foo));
        }
예제 #55
0
 public void TryResolve_NotRegisteredService_ThrowsRegistrationException() {
     var container = new NCopContainer(registry => { });
     container.Resolve<IFoo>();
 }
예제 #56
0
        public void AutoRegister_OfTypeThatHasTwoDependentPropertiesThatOneOfThemIsAnnotatedWithIgnoreDependency_ReturnsResolvedInstanceWithOnlyOneDependentProperty() {
            var container = new NCopContainer(registry => {
                registry.Register<IFoo>().From<Foo>();
                registry.RegisterAuto<IgnoreDependencyClass>();
            });

            var instance = container.Resolve<IgnoreDependencyClass>();

            Assert.IsNotNull(instance.Injected);
            Assert.IsNull(instance.Ignored);
        }
예제 #57
0
        public async Task Resolve_UsingAsPerThreadSingletonExpressionRegistrationWithAutoFactory_ReturnsDiffrentOjectsForDiffrentThreadsAndTheSameObjectForDifferentResolveCallsOnTheSameThread() {
            Foo foo1 = null;
            Foo foo2 = null;

            var container = new NCopContainer(registry => {
                registry.Register<Foo>().AsSingleton().PerThread();
            });

            foo1 = await Task.Factory.StartNew(() => container.Resolve<Foo>());
            foo2 = await Task.Factory.StartNew(() => container.Resolve<Foo>());

            Assert.AreNotEqual(foo1, foo2);
            Assert.AreEqual(container.Resolve<Foo>(), container.Resolve<Foo>());
        }
예제 #58
0
        public void DisposeOfParentContainer_OfDisposableObjectWhichIsOwnedByChildContainer_ReturnsDispsoedIndication() {
            var parentContainer = new NCopContainer(registry => {
            });

            var childContainer = parentContainer.CreateChildContainer(registry => {
                registry.Register<Foo>();
            });

            var instance = childContainer.Resolve<Foo>();

            Assert.IsFalse(instance.IsDisposed);
            parentContainer.Dispose();
            Assert.IsFalse(instance.IsDisposed);
        }