diff --git a/Test.LightweightIocContainer/IocContainerTest.cs b/Test.LightweightIocContainer/IocContainerTest.cs index 39b1add..717255b 100644 --- a/Test.LightweightIocContainer/IocContainerTest.cs +++ b/Test.LightweightIocContainer/IocContainerTest.cs @@ -44,6 +44,11 @@ namespace Test.LightweightIocContainer void ClearMultitonInstance(); } + private interface IFoo + { + + } + private class Test : ITest { @@ -61,6 +66,11 @@ namespace Test.LightweightIocContainer { } + + public TestConstructor(IFoo foo, string name) + { + + } } [UsedImplicitly] @@ -84,6 +94,12 @@ namespace Test.LightweightIocContainer } } + [UsedImplicitly] + private class Foo : IFoo + { + + } + public class MultitonScope { @@ -449,6 +465,17 @@ namespace Test.LightweightIocContainer Assert.AreEqual(callbackTest, test); } + [Test] + public void TestResolveSingleTypeRegistrationWithFactoryMethod() + { + _iocContainer.Register(); + _iocContainer.Register().WithFactoryMethod(c => new TestConstructor(c.Resolve(), "someName")); + + ITest test = _iocContainer.Resolve(); + + Assert.NotNull(test); + } + [Test] public void TestIsTypeRegistered() { diff --git a/Test.LightweightIocContainer/SingleTypeRegistrationTest.cs b/Test.LightweightIocContainer/SingleTypeRegistrationTest.cs new file mode 100644 index 0000000..b8bf268 --- /dev/null +++ b/Test.LightweightIocContainer/SingleTypeRegistrationTest.cs @@ -0,0 +1,61 @@ +// Author: Gockner, Simon +// Created: 2019-11-22 +// Copyright(c) 2019 SimonG. All Rights Reserved. + +using JetBrains.Annotations; +using LightweightIocContainer; +using LightweightIocContainer.Interfaces; +using LightweightIocContainer.Interfaces.Registrations; +using LightweightIocContainer.Registrations; +using Moq; +using NUnit.Framework; + +namespace Test.LightweightIocContainer +{ + [TestFixture] + // ReSharper disable MemberHidesStaticFromOuterClass + public class SingleTypeRegistrationTest + { + private interface IFoo + { + IBar Bar { get; } + } + + private interface IBar + { + + } + + [UsedImplicitly] + private class Foo : IFoo + { + public Foo(IBar bar) + { + Bar = bar; + } + + public IBar Bar { get; } + } + + [UsedImplicitly] + private class Bar : IBar + { + + } + + [Test] + public void TestSingleTypeRegistrationWithFactoryMethod() + { + IBar bar = new Bar(); + + Mock iocContainerMock = new Mock(); + iocContainerMock.Setup(c => c.Resolve()).Returns(bar); + + RegistrationFactory registrationFactory = new RegistrationFactory(iocContainerMock.Object); + ISingleTypeRegistration registration = registrationFactory.Register(Lifestyle.Transient).WithFactoryMethod(c => new Foo(c.Resolve())); + + IFoo foo = registration.FactoryMethod(iocContainerMock.Object); + Assert.AreEqual(bar, foo.Bar); + } + } +} \ No newline at end of file