using System.Collections.Generic; using NUnit.Framework; using Assert = ModestTree.Assert; namespace Zenject.Tests.Other { [TestFixture] public class TestGenericContract : ZenjectUnitTestFixture { class Test1 { public T Data; } class Test2 { } [Test] public void TestToSingle() { Container.Bind(typeof(Test1<>)).AsSingle().NonLazy(); var test1 = Container.Resolve>(); Assert.That(test1.Data == 0); test1.Data = 5; var test2 = Container.Resolve>(); Assert.That(test2 == test1); Assert.That(test1.Data == 5); } [Test] public void TestToTransient() { Container.Bind(typeof(Test1<>)).AsTransient().NonLazy(); var test1 = Container.Resolve>(); Assert.That(test1.Data == 0); var test2 = Container.Resolve>(); Assert.That(test2.Data == 0); Assert.That(test2 != test1); Container.Resolve>(); Container.Resolve>>(); Container.Resolve>(); } interface IFoo { } interface IBar { } class Test2 : IFoo, IBar { } [Test] public void TestToSingleMultipleContracts() { Container.Bind(typeof(IFoo<>), typeof(IBar<>)).To(typeof(Test2<>)).AsSingle(); var foo = Container.Resolve>(); Assert.That(foo is Test2); var bar = Container.Resolve>(); Assert.That(bar is Test2); Assert.IsEqual(foo, bar); Assert.IsEqual(foo, Container.Resolve>()); Assert.IsEqual(bar, Container.Resolve>()); } public interface IQux { } public class Qux : IQux { } [Test] public void TestToSingleMultipleContractsMismatch() { Container.Bind(typeof(IQux), typeof(IFoo<>), typeof(IBar<>)).To(typeof(Test2<>), typeof(Qux)).AsSingle(); var foo = Container.Resolve>(); Assert.That(foo is Test2); var bar = Container.Resolve>(); Assert.That(bar is Test2); Assert.IsEqual(foo, bar); Assert.IsEqual(foo, Container.Resolve>()); Assert.IsEqual(bar, Container.Resolve>()); var qux = Container.Resolve(); Assert.IsEqual(qux, Container.Resolve()); } } }