using NUnit.Framework; using Assert = ModestTree.Assert; namespace Zenject.Tests.Other { [TestFixture] public class TestSubContainers : ZenjectUnitTestFixture { class Test0 { } [Test] public void TestIsRemoved() { var subContainer = Container.CreateSubContainer(); var test1 = new Test0(); subContainer.Bind().FromInstance(test1); Assert.That(ReferenceEquals(test1, subContainer.Resolve())); Assert.Throws( delegate { Container.Resolve(); }); } class Test1 { [Inject] public Test0 Test = null; } [Test] public void TestCase2() { Test0 test0; Test1 test1; var subContainer = Container.CreateSubContainer(); var test0Local = new Test0(); subContainer.Bind().FromInstance(test0Local); subContainer.Bind().AsSingle(); test0 = subContainer.Resolve(); Assert.IsEqual(test0Local, test0); test1 = subContainer.Resolve(); Assert.Throws( delegate { Container.Resolve(); }); Assert.Throws( delegate { Container.Resolve(); }); Container.Bind().AsSingle(); Container.Bind().AsSingle(); Assert.That(Container.Resolve() != test0); Assert.That(Container.Resolve() != test1); } interface IFoo { } interface IFoo2 { } class Foo : IFoo, IFoo2 { } [Test] public void TestMultipleSingletonDifferentScope() { IFoo foo1; var subContainer1 = Container.CreateSubContainer(); subContainer1.Bind().To().AsSingle(); foo1 = subContainer1.Resolve(); var subContainer2 = Container.CreateSubContainer(); subContainer2.Bind().To().AsSingle(); var foo2 = subContainer2.Resolve(); Assert.That(foo2 != foo1); } } }