using NUnit.Framework; using Assert = ModestTree.Assert; namespace Zenject.Tests.Bindings { [TestFixture] public class TestFromSubContainerInstaller : ZenjectUnitTestFixture { [Test] public void TestInstallerSelfSingle() { Container.Bind().FromSubContainerResolve().ByInstaller().AsSingle().NonLazy(); var foo = Container.Resolve(); Assert.IsNotNull(foo.Bar); Assert.IsEqual(foo, Container.Resolve()); } [Test] public void TestInstallerSelfTransient() { Container.Bind().FromSubContainerResolve().ByInstaller().AsTransient().NonLazy(); var foo = Container.Resolve(); Assert.IsNotNull(foo.Bar); Assert.IsNotEqual(foo, Container.Resolve()); } [Test] public void TestInstallerSelfCached() { Container.Bind().FromSubContainerResolve().ByInstaller().AsSingle().NonLazy(); var foo = Container.Resolve(); Assert.IsNotNull(foo.Bar); Assert.IsEqual(foo, Container.Resolve()); } [Test] public void TestInstallerSelfSingleMultipleContracts() { Container.Bind(typeof(Foo), typeof(Bar)).FromSubContainerResolve().ByInstaller().AsSingle().NonLazy(); Assert.IsEqual(Container.Resolve().Bar, Container.Resolve()); } [Test] public void TestInstallerSelfCachedMultipleContracts() { Container.Bind(typeof(Foo), typeof(IFoo)).To().FromSubContainerResolve().ByInstaller().AsSingle().NonLazy(); Assert.IsEqual(Container.Resolve(), Container.Resolve()); } [Test] public void TestInstallerSelfSingleMultipleMatches() { Container.Bind().FromSubContainerResolveAll().ByInstaller().AsSingle().NonLazy(); Assert.IsEqual(Container.ResolveAll().Count, 2); } [Test] public void TestInstallerSelfIdentifiersFails() { Container.Bind().FromSubContainerResolve().ByInstaller().AsSingle().NonLazy(); Assert.Throws(() => Container.Resolve()); } [Test] public void TestInstallerSelfIdentifiers() { Container.Bind().FromSubContainerResolve("gorp").ByInstaller().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; } } class FooInstaller : Installer { public override void InstallBindings() { Container.Bind().AsSingle(); Container.Bind().AsSingle(); Container.Bind().AsTransient(); Container.Bind().FromInstance(new Qux()); Container.Bind().WithId("gorp").AsTransient(); } } } }