Ejemplo n.º 1
0
        public void SetValueCallsArePreservedWhenTransientLifetimeRemovalRuns()
        {
            var container = new QuickInjectContainer();
            container.AddBuildPlanVisitor(new TransientLifetimeRemovalBuildPlanVisitor());

            container.RegisterType<IFoo, Foo>(new ContainerControlledLifetimeManager(), new Microsoft.Practices.Unity.InjectionFactory(c => new Foo()));
            container.RegisterType<IBar, Foo>(new ContainerControlledLifetimeManager(), new Microsoft.Practices.Unity.InjectionFactory(c => new Foo()));

            var a = container.Resolve<IFoo>();
            var b = container.Resolve<IBar>();

            Assert.AreSame(a, b);
        }
Ejemplo n.º 2
0
        public void SynchronizedLifetimeManagerRecoveryTestWithExceptionReThrownAndRecoverCalled()
        {
            var container = new QuickInjectContainer();
            container.AddBuildPlanVisitor(new LifetimeManagerRequiresRecoveryBuildPlanVisitor());

            var lifetime = new ThrowRecordingSynchronizedLifetimeManager();
            container.RegisterType<Foo>(lifetime, new Microsoft.Practices.Unity.InjectionFactory(c =>
            {
                throw new ArgumentNullException("Foobar");
            }));

            bool exceptionWasReThrown = false;

            try
            {
                container.Resolve<Foo>();
            }
            catch (ArgumentNullException)
            {
                exceptionWasReThrown = true;
            }

            Assert.IsTrue(exceptionWasReThrown);
            Assert.IsTrue(lifetime.RecoverWasCalled);
        }
Ejemplo n.º 3
0
        public void ReregistrationOfATypeUpdatesBuildCacheInChildContainer()
        {
            var container = new QuickInjectContainer();
            container.AddBuildPlanVisitor(new LifetimeManagerRequiresRecoveryBuildPlanVisitor());

            var child = container.CreateChildContainer().CreateChildContainer();

            var foo = new Foo();

            container.RegisterType<Foo>(new ContainerControlledLifetimeManager(), new Microsoft.Practices.Unity.InjectionFactory(c => foo));
            var cfoo = child.Resolve<ConsumesFoo>();
            container.RegisterType<Foo>(new ContainerControlledLifetimeManager(), new Microsoft.Practices.Unity.InjectionFactory(c => new Foo()));

            var cfoo2 = child.Resolve<ConsumesFoo>();

            Assert.AreNotSame(cfoo.Foo, cfoo2.Foo);
        }
Ejemplo n.º 4
0
        public void LifetimeManagerWillProvideValueForAnInterfaceType()
        {
            var container = new QuickInjectContainer();
            container.AddBuildPlanVisitor(new TransientLifetimeRemovalBuildPlanVisitor());

            var lifetime = new ContainerControlledLifetimeManager();
            var foo = new Foo();
            lifetime.SetValue(foo);

            container.RegisterType<IFoo>(lifetime);

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

            Assert.AreSame(a, foo);
        }
Ejemplo n.º 5
0
        public void GeneratedCodeOnlyComputesNeededDependencies()
        {
            var a = new QuickInjectContainer();
            a.RegisterType<Foo>(new ParameterizedLambdaExpressionInjectionFactory<FooProvider, Foo>(x => x.ProvideFoo()));
            a.RegisterType<string>(new ParameterizedLambdaExpressionInjectionFactory<VOS, string>((x) => x.GROB("foo")));
            a.RegisterType<Mything>(new ParameterizedLambdaExpressionInjectionFactory<VOS, Foo, Mything>((x, y) => x.GROB("Foo", "bar")));
            a.RegisterType<FooBar>(new ParameterizedInjectionFactory<VOS, Foo, FooBar>(Func));
            a.RegisterType<XA>(new TransientLifetimeManager());
            a.RegisterType<XB>(new ContainerControlledLifetimeManager());
            a.RegisterType<XC>(new TransientLifetimeManager());

            a.AddBuildPlanVisitor(new LifetimeManagerRequiresRecoveryBuildPlanVisitor());
            a.AddBuildPlanVisitor(new TransientLifetimeRemovalBuildPlanVisitor());

            var ss = a.Resolve<GuidString>();

            Assert.IsTrue(XC.StaticVariable == 1);
        }
Ejemplo n.º 6
0
        public void FuncOfTTest()
        {
            var container = new QuickInjectContainer();
            container.AddBuildPlanVisitor(new TransientLifetimeRemovalBuildPlanVisitor());

            var lifetime = new ContainerControlledLifetimeManager();
            var foo = new Foo();
            lifetime.SetValue(foo);

            container.RegisterType<IFoo>(lifetime);

            var a = container.Resolve<Func<IFoo>>();

            Assert.AreSame(a(), foo);
        }
Ejemplo n.º 7
0
        public void ComplicatedRegistrationsWithChildContainerLifetimes2()
        {
            var container = new QuickInjectContainer();
            container.AddBuildPlanVisitor(new TransientLifetimeRemovalBuildPlanVisitor());
            var child = container.CreateChildContainer();

            var correctInstanceForIFooResolutionFromChild = new Foo();
            var correctInstanceForFooResolutionFromChild = new SuperFoo();

            var preSetFooOnLifetime = new Foo();
            SuperFoo fooResolvedFromMainContainer = new SuperFoo();

            var lifetime = new ContainerControlledLifetimeManager();
            lifetime.SetValue(fooResolvedFromMainContainer);

            container.RegisterType<IFoo, Foo>(new ContainerControlledLifetimeManager(), new Microsoft.Practices.Unity.InjectionFactory(c => new Foo()));
            container.RegisterType<IBar, Foo>(new ContainerControlledLifetimeManager(), new Microsoft.Practices.Unity.InjectionFactory(c => correctInstanceForIFooResolutionFromChild));
            container.RegisterType<Foo, SuperFoo>(new ContainerControlledLifetimeManager(), new Microsoft.Practices.Unity.InjectionFactory(c => fooResolvedFromMainContainer));
            container.RegisterType<SuperFoo>(lifetime);
            child.RegisterType<Foo, SuperFoo>(new ContainerControlledLifetimeManager(), new Microsoft.Practices.Unity.InjectionFactory(c => correctInstanceForFooResolutionFromChild));

            var f = container.Resolve<Foo>();
            var g = container.Resolve<Foo>();

            Assert.AreSame(child.Resolve<IBar>(), correctInstanceForIFooResolutionFromChild);
            Assert.AreSame(child.Resolve<IFoo>(), correctInstanceForIFooResolutionFromChild);
            Assert.AreSame(child.Resolve<Foo>(), correctInstanceForFooResolutionFromChild);
            Assert.AreSame(container.Resolve<Foo>(), fooResolvedFromMainContainer);
            Assert.AreSame(container.Resolve<SuperFoo>(), fooResolvedFromMainContainer);
        }