Ich arbeite mit einer ASP.Net Core Webanwendung und die typische Registrierungsmethode in der Startup.cs-Klasse verwenden, um meine Dienste zu registrieren.ASP.Net Core Ruft Dienste von DI-Container
Ich muss auf die registrierten Dienste in der IServiceCollection zugreifen, um über sie zu iterieren, um eine bestimmte Dienstinstanz zu finden.
Wie kann dies mit dem ASP.Net Core DI Container gemacht werden? Ich muss dies außerhalb eines Controllers tun.
Unten ist ein Beispiel für das, was ich versuche zu tun. Beachten Sie, dass die All-Methode nicht auf dem ServiceCollection nicht vorhanden ist, ist das, was ich versuche herauszufinden:
public class EventContainer : IEventDispatcher
{
private readonly IServiceCollection _serviceCollection;
public EventContainer(IServiceCollection serviceCollection)
{
_serviceCollection = serviceCollection;
}
public void Dispatch<TEvent>(TEvent eventToDispatch) where TEvent : IDomainEvent
{
foreach (var handler in _serviceCollection.All<IDomainHandler<TEvent>>())
{
handler.Handle(eventToDispatch);
}
}
}
Ist es richtig, dass Sie 'IServiceCollection' im Konstruktor zu injizieren versuchen von' EventContainer', indem sie es in Ihrem DI-Container Registrierung? – larsbe
Sie möchten es wirklich manuell zu iterieren - warum möchten Sie IServiceProvider nicht verwenden: serviceProvider.GetService>()? –
Da meinem Event-Handler möglicherweise mehrere Typen zugeordnet sind. Wie EmailHandler, PushNotificationHandler, etc. –