From d4deff36b1b5d246d9502a3917bfd04d05e0b6c9 Mon Sep 17 00:00:00 2001 From: Pavel Krymets Date: Fri, 29 Dec 2023 17:34:08 -0800 Subject: [PATCH] Named --- .../ContainerTests.cs | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/Jab.FunctionalTests.Common/ContainerTests.cs b/src/Jab.FunctionalTests.Common/ContainerTests.cs index 03601d0..53d1fe1 100644 --- a/src/Jab.FunctionalTests.Common/ContainerTests.cs +++ b/src/Jab.FunctionalTests.Common/ContainerTests.cs @@ -964,8 +964,35 @@ public void SupportsImplicitFunc() Assert.NotSame(transientService1, transientService2); } + + [Fact] + public void SupportsImplicitNamedFunc() + { + SupportsImplicitFuncFactoryContainer c = new(); + var transientFunc = c.GetService>("named"); + var transientFunc2 = c.GetService>("named"); + var transientService1 = transientFunc(); + var transientService2 = transientFunc(); + + var singletonFunc = c.GetService>("named"); + var singletonFunc2 = c.GetService>("named"); + + var singletonService1 = singletonFunc(); + var singletonService2 = singletonFunc2(); + + Assert.Equal(2, c.TransientNamedCount); + Assert.Equal(1, c.SingletonNamedCount); + + Assert.Same(singletonFunc, singletonFunc2); + Assert.Same(transientFunc, transientFunc2); + + Assert.Same(singletonService1, singletonService2); + Assert.NotSame(transientService1, transientService2); + } [ServiceProvider(RootServices = new [] { typeof(Func) })] + [Transient(typeof(IService), Factory=nameof(TransientNamedFactory), Name = "named")] + [Singleton(typeof(IService2), Factory=nameof(SingletonNamedFactory), Name = "named")] [Transient(typeof(IService), Factory=nameof(TransientFactory))] [Scoped(typeof(IService1), Factory=nameof(ScopedFactory))] [Singleton(typeof(IService2), Factory=nameof(SingletonFactory))] @@ -974,6 +1001,9 @@ internal partial class SupportsImplicitFuncFactoryContainer internal int TransientCount = 0; internal int ScopedCount = 0; internal int SingletonCount = 0; + + internal int TransientNamedCount = 0; + internal int SingletonNamedCount = 0; internal ServiceImplementation TransientFactory() { @@ -990,6 +1020,17 @@ internal ServiceImplementation SingletonFactory() SingletonCount++; return new(); } + + internal ServiceImplementation TransientNamedFactory() + { + TransientNamedCount++; + return new(); + } + internal ServiceImplementation SingletonNamedFactory() + { + SingletonNamedCount++; + return new(); + } } #region Non-generic member factory with parameters