diff --git a/Test.LightweightIocContainer/MultiLayerResolveTest.cs b/Test.LightweightIocContainer/MultiLayerResolveTest.cs new file mode 100644 index 0000000..8309840 --- /dev/null +++ b/Test.LightweightIocContainer/MultiLayerResolveTest.cs @@ -0,0 +1,85 @@ +// Author: Gockner, Simon +// Created: 2021-12-09 +// Copyright(c) 2021 SimonG. All Rights Reserved. + +using JetBrains.Annotations; +using LightweightIocContainer; +using NUnit.Framework; + +namespace Test.LightweightIocContainer; + +[TestFixture] +public class MultiLayerResolveTest +{ + public interface IA + { + + } + + public interface IB + { + + } + + [UsedImplicitly] + public interface IAFactory + { + IA Create(); + } + + [UsedImplicitly] + public interface IBFactory + { + IB Create(C c); + } + + [UsedImplicitly] + private class A : IA + { + [UsedImplicitly] + private readonly IB _b; + + public A(IBFactory bFactory) => _b = bFactory.Create(new C("from A")); + } + + [UsedImplicitly] + private class B : IB + { + public B(C c) + { + + } + } + + [UsedImplicitly] + public class C + { + public C(string test) + { + + } + } + + [Test] + public void TestResolveFactoryAsCtorParameter() + { + IocContainer container = new(); + container.Register().WithFactory(); + container.Register().WithFactory(); + + IA a = container.Resolve(); + Assert.IsInstanceOf(a); + } + + [Test] + public void TestResolveSingleTypeRegistrationAsCtorParameter() + { + IocContainer container = new(); + container.Register(); + container.Register().WithFactory(); + container.Register().WithFactoryMethod(_ => new C("test")); + + IB b = container.Resolve(); + Assert.IsInstanceOf(b); + } +} \ No newline at end of file