using NUnit.Framework; using Assert = ModestTree.Assert; namespace Zenject.Tests.Bindings { [TestFixture] public class TestFromGetter : ZenjectUnitTestFixture { [Test] public void TestTransient() { Container.Bind().AsSingle(); Container.Bind().FromResolveGetter(x => x.Bar); Assert.IsNotNull(Container.Resolve()); Assert.IsEqual(Container.Resolve(), Container.Resolve().Bar); } [Test] public void TestSingleFailure() { Container.Bind().AsCached(); Container.Bind().AsCached(); Container.Bind().FromResolveGetter(x => x.Bar).AsSingle(); Assert.Throws(() => Container.Resolve()); } [Test] public void TestMultiple() { Container.Bind().AsCached(); Container.Bind().AsCached(); Container.Bind().FromResolveAllGetter(x => x.Bar).AsSingle(); Assert.IsEqual(Container.ResolveAll().Count, 2); } [Test] public void TestInjectSource1() { Container.Bind().AsCached(); Container.Bind().AsCached(); var subContainer = Container.CreateSubContainer(); subContainer.Bind().AsCached(); subContainer.Bind().FromResolveAllGetter(x => x.Bar); Assert.IsEqual(subContainer.ResolveAll().Count, 3); } [Test] public void TestInjectSource2() { Container.Bind().AsCached(); Container.Bind().AsCached(); var subContainer = Container.CreateSubContainer(); subContainer.Bind().AsCached(); subContainer.Bind().FromResolveAllGetter(null, x => x.Bar, InjectSources.Local); Assert.IsEqual(subContainer.ResolveAll().Count, 1); } [Test] public void TestInjectSource3() { Container.Bind().AsCached(); Container.Bind().AsCached(); var subContainer = Container.CreateSubContainer(); subContainer.Bind().AsCached(); subContainer.Bind().FromResolveGetter(null, x => x.Bar); Assert.IsNotNull(subContainer.Resolve()); } [Test] public void TestInjectSource4() { Container.Bind().AsCached(); var subContainer = Container.CreateSubContainer(); subContainer.Bind().AsCached(); subContainer.Bind().AsCached(); subContainer.Bind().FromResolveGetter(null, x => x.Bar, InjectSources.Parent); Assert.IsEqual(subContainer.ResolveAll().Count, 1); } interface IBar { } class Bar : IBar { } class Foo { public Foo() { Bar = new Bar(); } public Bar Bar { get; private set; } } } }