using System; using NUnit.Framework; using Assert = ModestTree.Assert; namespace Zenject.Tests.Other { [TestFixture] public class TestFacadeSubContainer { static int NumInstalls; [Test] public void Test1() { NumInstalls = 0; InitTest.WasRun = false; TickTest.WasRun = false; DisposeTest.WasRun = false; var container = new DiContainer(); container.Bind(typeof(TickableManager), typeof(InitializableManager), typeof(DisposableManager)) .ToSelf().AsSingle().CopyIntoAllSubContainers(); // This is how you add ITickables / etc. within sub containers container.BindInterfacesAndSelfTo() .FromSubContainerResolve().ByMethod(InstallFoo).AsSingle(); var tickManager = container.Resolve(); var initManager = container.Resolve(); var disposeManager = container.Resolve(); Assert.That(!InitTest.WasRun); Assert.That(!TickTest.WasRun); Assert.That(!DisposeTest.WasRun); initManager.Initialize(); tickManager.Update(); disposeManager.Dispose(); Assert.That(InitTest.WasRun); Assert.That(TickTest.WasRun); Assert.That(DisposeTest.WasRun); } public void InstallFoo(DiContainer subContainer) { NumInstalls++; subContainer.Bind().AsSingle(); subContainer.Bind().To().AsSingle(); subContainer.Bind().To().AsSingle(); subContainer.Bind().To().AsSingle(); } public class FooKernel : Kernel { } public class InitTest : IInitializable { public static bool WasRun; public void Initialize() { WasRun = true; } } public class TickTest : ITickable { public static bool WasRun; public void Tick() { WasRun = true; } } public class DisposeTest : IDisposable { public static bool WasRun; public void Dispose() { WasRun = true; } } } }