From 9d5028badea565983f88247d6d6e3bc80abb5e67 Mon Sep 17 00:00:00 2001 From: Bernhard Richter Date: Wed, 18 Sep 2024 17:19:07 +0200 Subject: [PATCH] All tests passed --- src/LightInject.Tests/KeyedMicrosoftTests.cs | 23 ++++++++++++++++++++ src/LightInject/LightInject.cs | 14 +++++------- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/LightInject.Tests/KeyedMicrosoftTests.cs b/src/LightInject.Tests/KeyedMicrosoftTests.cs index 7c379e7e..a53539dc 100644 --- a/src/LightInject.Tests/KeyedMicrosoftTests.cs +++ b/src/LightInject.Tests/KeyedMicrosoftTests.cs @@ -312,6 +312,29 @@ public void ResolveKeyedServiceSingletonInstanceWithAnyKey() Assert.Equal(serviceKey2, svc2.ToString()); } + [Fact] + public void ResolveKeyedServicesSingletonInstanceWithAnyKey() + { + var container = CreateContainer(); + var rootScope = container.BeginScope(); + var service1 = new FakeService(); + var service2 = new FakeService(); + + var serviceCollection = new ServiceCollection(); + serviceCollection.AddKeyedSingleton>(KeyedService.AnyKey, service1); + serviceCollection.AddKeyedSingleton>("some-key", service2); + container.Register>(sf => service1, KeyedService.AnyKey.ToString(), new PerRootScopeLifetime(rootScope)); + container.Register>(sf => service2, "some-key", new PerRootScopeLifetime(rootScope)); + + // container.RegisterInstance>(service1, KeyedService.AnyKey.ToString()); + // container.RegisterInstance>(service2, "some-key"); + + + // var provider = CreateServiceProvider(serviceCollection); + var services = rootScope.GetInstance>>("some-key").ToList(); + // var services = provider.GetKeyedServices>("some-key").ToList(); + Assert.Equal(new[] { service1, service2 }, services); + } internal interface IService { } diff --git a/src/LightInject/LightInject.cs b/src/LightInject/LightInject.cs index 471c13ac..a7934ff4 100644 --- a/src/LightInject/LightInject.cs +++ b/src/LightInject/LightInject.cs @@ -4838,18 +4838,14 @@ private Action CreateEmitMethodForEnumerableServiceServiceRequest(Type { if (serviceName == "*") { - // var serviceKeys = allEmitters.Keys.Where(k => actualServiceType.IsAssignableFrom(k.ServiceType) && k.ServiceName.Length > 0).ToList(); - - // var query = from r in allRegistrations.SelectMany(r => r.Value) - // join k in serviceKeys on new ServiceKey(r.ServiceType, r.ServiceName) equals k - // select r; - - - // allRegistrations.Join(serviceKeys, r => new ServiceKey(r.ServiceType, r.ServiceName), k => k, (r, k) => r).ToList().ForEach(r => Register(r)); - emitMethods = allEmitters.Keys.Where(k => actualServiceType.IsAssignableFrom(k.ServiceType) && k.ServiceName.Length > 0).SelectMany(k => allEmitters[k]).Where(emi => !emi.CreatedFromWildcardService).OrderBy(emi => emi.RegistrationOrder).Select(emi => emi.EmitMethod).ToList(); } else + if (serviceName.Length > 0) + { + emitMethods = allEmitters.Keys.Where(k => actualServiceType.IsAssignableFrom(k.ServiceType) && k.ServiceName == serviceName || k.ServiceName == "*").SelectMany(k => allEmitters[k]).Where(emi => !emi.CreatedFromWildcardService).OrderBy(emi => emi.RegistrationOrder).Select(emi => emi.EmitMethod).ToList(); + } + else { var serviceKeys = allEmitters.Keys.Where(k => actualServiceType.IsAssignableFrom(k.ServiceType) && k.ServiceName == serviceName).ToList(); emitMethods = serviceKeys.SelectMany(k => allEmitters[k]).Select(emi => emi.EmitMethod).ToList();