using NUnit.Framework; using Assert = ModestTree.Assert; namespace Zenject.Tests.Bindings { [TestFixture] public class TestFromSubContainerInstanceGetter : ZenjectUnitTestFixture { [Test] public void TestInstallerSelfSingle() { Container.Bind().FromSubContainerResolve() .ByInstanceGetter(ctx => CreateFooSubContainer()).AsSingle().NonLazy(); Assert.IsNotNull(Container.Resolve().Bar); } [Test] public void TestInstallerSelfTransient() { Container.Bind().FromSubContainerResolve() .ByInstanceGetter(ctx => CreateFooSubContainer()).AsTransient().NonLazy(); Assert.IsNotNull(Container.Resolve().Bar); } [Test] public void TestInstallerSelfCached() { Container.Bind().FromSubContainerResolve() .ByInstanceGetter(ctx => CreateFooSubContainer()).AsSingle().NonLazy(); Assert.IsNotNull(Container.Resolve().Bar); } [Test] public void TestInstallerSelfSingleMultipleContracts() { Container.Bind(typeof(Foo), typeof(Bar)).FromSubContainerResolve() .ByInstanceGetter(ctx => CreateFooSubContainer()).AsSingle().NonLazy(); Assert.IsEqual(Container.Resolve().Bar, Container.Resolve()); } [Test] public void TestInstallerSelfCachedMultipleContracts() { Container.Bind(typeof(Foo), typeof(IFoo)).To().FromSubContainerResolve() .ByInstanceGetter(ctx => CreateFooSubContainer()).AsSingle().NonLazy(); Assert.IsEqual(Container.Resolve(), Container.Resolve()); } [Test] public void TestInstallerSelfSingleMultipleMatches() { Container.Bind().FromSubContainerResolveAll() .ByInstanceGetter(ctx => CreateFooSubContainer()).AsSingle().NonLazy(); Assert.IsEqual(Container.ResolveAll().Count, 2); } [Test] public void TestInstallerSelfIdentifiersFails() { Container.Bind().FromSubContainerResolve() .ByInstanceGetter(ctx => CreateFooSubContainer()).AsSingle().NonLazy(); Assert.Throws(() => Container.Resolve()); } [Test] public void TestInstallerSelfIdentifiers() { Container.Bind().FromSubContainerResolve("gorp") .ByInstanceGetter(ctx => CreateFooSubContainer()).AsSingle().NonLazy(); Assert.IsNotNull(Container.Resolve()); } public class Gorp { } public class Qux { } public class Bar { } public interface IFoo { } public class Foo : IFoo { public Foo(Bar bar) { Bar = bar; } public Bar Bar { get; private set; } } DiContainer CreateFooSubContainer() { var subContainer = new DiContainer(); subContainer.Bind().AsSingle(); subContainer.Bind().AsSingle(); subContainer.Bind().AsTransient(); subContainer.Bind().FromInstance(new Qux()); subContainer.Bind().WithId("gorp").AsTransient(); return subContainer; } } }