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); }
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); }
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); }
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); }
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); }
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); }
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); }