using System.Collections.Generic; using NUnit.Framework; using Assert = ModestTree.Assert; namespace Zenject.Tests.Other { [TestFixture] public class TestSubContainers4 : ZenjectUnitTestFixture { readonly Dictionary _subContainers = new Dictionary(); [Test] public void RunTest() { SetupContainer(); var view1 = Container.Resolve(); Assert.IsEqual(view1.Controller.Model, view1.Model); var view2 = Container.Resolve(); Assert.IsEqual(view2.Controller.Model, view2.Model); Assert.IsNotEqual(view2.Model, view1.Model); Assert.IsNotEqual(view2, view1); } void SetupContainer() { Container.Bind().FromMethod(SubContainerResolve).AsTransient() .WhenInjectedInto(); Container.Bind().FromMethod(SubContainerResolve).AsTransient() .WhenInjectedInto(); Container.Bind().AsTransient(); } T SubContainerResolve(InjectContext context) { Assert.IsNotNull(context.ObjectInstance); DiContainer subContainer; if (!_subContainers.TryGetValue(context.ObjectInstance, out subContainer)) { subContainer = context.Container.CreateSubContainer(); _subContainers.Add(context.ObjectInstance, subContainer); InstallViewBindings(subContainer); } return (T)subContainer.Resolve(context); } void InstallViewBindings(DiContainer subContainer) { subContainer.Bind().AsSingle(); subContainer.Bind().AsSingle(); } public class RotorController { [Inject] public RotorModel Model; } public class RotorView { [Inject] public RotorController Controller; [Inject] public RotorModel Model; } public class RotorModel { } } }