using NUnit.Framework; using Assert = ModestTree.Assert; namespace Zenject.Tests.Bindings { [TestFixture] public class TestFromSubContainerMethod : ZenjectUnitTestFixture { [Test] public void TestMethodSelfSingle() { Container.Bind().FromSubContainerResolve().ByMethod(InstallFooFacade).AsSingle().NonLazy(); var foo = Container.Resolve(); Assert.IsNotNull(foo.Bar); Assert.IsEqual(foo, Container.Resolve()); } [Test] public void TestMethodSelfTransient() { Container.Bind().FromSubContainerResolve().ByMethod(InstallFooFacade).AsTransient().NonLazy(); var foo = Container.Resolve(); Assert.IsNotNull(foo.Bar); Assert.IsNotEqual(foo, Container.Resolve()); } [Test] public void TestDanglingBinding() { Container.Bind().FromSubContainerResolve(); Assert.Throws(() => Container.Resolve()); } [Test] public void TestMethodSelfCached() { Container.Bind().FromSubContainerResolve().ByMethod(InstallFooFacade).AsSingle().NonLazy(); var foo = Container.Resolve(); Assert.IsNotNull(foo.Bar); Assert.IsEqual(foo, Container.Resolve()); } [Test] public void TestMethodSelfCachedMultipleContracts() { Container.Bind(typeof(Foo), typeof(Bar)).FromSubContainerResolve().ByMethod(InstallFooFacade).AsSingle().NonLazy(); Assert.IsEqual(Container.Resolve().Bar, Container.Resolve()); } [Test] public void TestMethodConcreteSingle() { Container.Bind().To().FromSubContainerResolve().ByMethod(InstallFooFacade).AsSingle().NonLazy(); Assert.IsNotNull(Container.Resolve().Bar); } [Test] public void TestMethodConcreteTransient() { Container.Bind().To().FromSubContainerResolve().ByMethod(InstallFooFacade).AsTransient().NonLazy(); Assert.IsNotNull(Container.Resolve().Bar); } [Test] public void TestMethodConcreteCached() { Container.Bind().To() .FromSubContainerResolve().ByMethod(InstallFooFacade).AsSingle().NonLazy(); Assert.IsNotNull(Container.Resolve().Bar); } [Test] public void TestMethodConcreteCachedMultipleContracts() { Container.Bind(typeof(Foo), typeof(IFoo)).To().FromSubContainerResolve().ByMethod(InstallFooFacade).AsSingle().NonLazy(); Assert.IsEqual(Container.Resolve(), Container.Resolve()); } [Test] public void TestMethodSelfIdentifiersFails() { Container.Bind().FromSubContainerResolve().ByMethod(InstallFooFacade).AsSingle().NonLazy(); Assert.Throws(() => Container.Resolve()); } [Test] public void TestMethodSelfIdentifiers() { Container.Bind().FromSubContainerResolve("gorp").ByMethod(InstallFooFacade).AsSingle().NonLazy(); Assert.IsNotNull(Container.Resolve()); } public class Gorp { } public class Bar { } public interface IFoo { Bar Bar { get; } } public class Foo : IFoo { public Foo(Bar bar) { Bar = bar; } public Bar Bar { get; private set; } } void InstallFooFacade(DiContainer container) { container.Bind().AsSingle(); container.Bind().AsSingle(); container.Bind().WithId("gorp").AsTransient(); } } }