// Author: Gockner, Simon // Created: 2020-11-19 // Copyright(c) 2020 SimonG. All Rights Reserved. using JetBrains.Annotations; using LightweightIocContainer; using NUnit.Framework; namespace Test.LightweightIocContainer; [TestFixture] public class MultipleMultitonRegistrationTest { private IocContainer _iocContainer; [UsedImplicitly] public interface ITest : IProvider { } public interface IProvider { int Number { get; } void DoSomething(int number); } [UsedImplicitly] private class Test : ITest { public Test(MultitonScope scope) { } public int Number { get; private set; } public void DoSomething(int number) => Number = number; } private class MultitonScope { } [SetUp] public void SetUp() => _iocContainer = new IocContainer(); [TearDown] public void TearDown() => _iocContainer.Dispose(); [Test] public void TestRegisterAndResolveMultipleMultitonRegistration() { _iocContainer.Register(r => r.AddMultiton()); MultitonScope scope = new(); ITest test = _iocContainer.Resolve(scope); Assert.NotNull(test); IProvider provider = _iocContainer.Resolve(scope); Assert.NotNull(provider); Assert.AreEqual(test, provider); Assert.AreSame(test, provider); } [Test] public void TestRegisterAndResolveMultipleMultitonRegistrationWithDifferentScope() { _iocContainer.Register(r => r.AddMultiton()); MultitonScope scope = new(); MultitonScope differentScope = new(); ITest test = _iocContainer.Resolve(scope); Assert.NotNull(test); IProvider provider = _iocContainer.Resolve(differentScope); Assert.NotNull(provider); Assert.AreNotEqual(test, provider); Assert.AreNotSame(test, provider); } [Test] public void TestMultipleMultitonRegistrationOnCreate() { _iocContainer.Register(r => r.AddMultiton().OnCreate(t => t.DoSomething(1))); MultitonScope scope = new(); ITest test = _iocContainer.Resolve(scope); Assert.NotNull(test); Assert.AreEqual(1, test.Number); IProvider provider = _iocContainer.Resolve(scope); Assert.NotNull(provider); Assert.AreEqual(1, provider.Number); Assert.AreEqual(test, provider); Assert.AreSame(test, provider); } }