using NUnit.Framework; using StyletIoC; using System; using System.Collections.Generic; using System.Linq; namespace StyletUnitTests.StyletIoC { [TestFixture] public class StyletIoCFuncFactoryTests { private class C1 { } private class C2 { public Func C1Func; public C2(Func c1Func) { this.C1Func = c1Func; } } public interface I1 { } private class C11 : I1 { } private class C12 : I1 { } public interface I1Factory { I1 GetI1(); } [Test] public void FuncFactoryWorksForGetNoKey() { var builder = new StyletIoCBuilder(); builder.Bind().ToSelf(); var ioc = builder.BuildContainer(); var func = ioc.Get>(); var result = func(); Assert.IsNotNull(result); } [Test] public void FuncFactoryWorksConstructorInjection() { var builder = new StyletIoCBuilder(); builder.Bind().ToSelf(); builder.Bind().ToSelf(); var ioc = builder.BuildContainer(); var c2 = ioc.Get(); var c1Func = c2.C1Func; Assert.IsNotNull(c1Func()); } [Test] public void FuncFactoryOfTransientWorksAsExpected() { var builder = new StyletIoCBuilder(); builder.Bind().ToSelf(); var ioc = builder.BuildContainer(); var func = ioc.Get>(); Assert.AreNotEqual(func(), func()); } [Test] public void FuncFactoryOfSingletonWorksAsExpected() { var builder = new StyletIoCBuilder(); builder.Bind().ToSelf().InSingletonScope(); var ioc = builder.BuildContainer(); var func = ioc.Get>(); Assert.AreEqual(func(), func()); } [Test] public void FuncFactoryOfIEnumerableWorksAsExpected() { var builder = new StyletIoCBuilder(); builder.Bind().To(); builder.Bind().To(); var ioc = builder.BuildContainer(); var func = ioc.Get>>(); var results = func().ToList(); Assert.AreEqual(2, results.Count); Assert.IsInstanceOf(results[0]); Assert.IsInstanceOf(results[1]); } [Test] public void IEnumerableOfFuncFactoryWorksAsExpected() { var builder = new StyletIoCBuilder(); builder.Bind().To(); builder.Bind().To(); var ioc = builder.BuildContainer(); var funcCollection = ioc.GetTypeOrAll>>().ToList(); var result = funcCollection[0](); Assert.AreEqual(2, funcCollection.Count); Assert.IsInstanceOf(funcCollection[0]()); Assert.IsInstanceOf(funcCollection[1]()); } [Test] public void FuncFactoryOfAbstractFactoryWorksAsExpected() { var builder = new StyletIoCBuilder(); builder.Bind().To(); builder.Bind().ToAbstractFactory(); var ioc = builder.BuildContainer(); var func = ioc.Get>(); Assert.IsNotNull(func); var i1 = func().GetI1(); Assert.IsInstanceOf(i1); } } }