using System; using NUnit.Framework; using Assert = ModestTree.Assert; namespace Zenject.Tests.Bindings { [TestFixture] public class TestFromMethod : ZenjectUnitTestFixture { [Test] public void TestSingle() { var foo = new Foo(); Container.Bind().FromMethod(ctx => foo).AsSingle().NonLazy(); Assert.IsEqual(Container.Resolve(), foo); } [Test] public void TestTransient() { var foo = new Foo(); Container.Bind().FromMethod(ctx => foo).AsTransient().NonLazy(); Assert.IsEqual(Container.Resolve(), foo); } [Test] public void TestCached() { var foo = new Foo(); Container.Bind().FromMethod(ctx => foo).AsSingle().NonLazy(); Assert.IsEqual(Container.Resolve(), foo); } Foo CreateFoo(InjectContext ctx) { return new Foo(); } [Test] public void TestTransient2() { int numCalls = 0; Func method = ctx => { numCalls++; return null; }; Container.Bind().FromMethod(method).AsTransient().NonLazy(); Container.Bind().To().FromMethod(method).AsTransient().NonLazy(); Container.Resolve(); Container.Resolve(); Container.Resolve(); Container.Resolve(); Assert.IsEqual(numCalls, 4); } [Test] public void TestCached2() { Container.Bind(typeof(Foo), typeof(IFoo)).To().FromMethod(ctx => new Foo()).AsSingle().NonLazy(); Assert.IsEqual(Container.Resolve(), Container.Resolve()); Assert.IsEqual(Container.Resolve(), Container.Resolve()); } interface IFoo { } class Foo : IFoo { } } }