私はASP.NetコアWebアプリケーションを使用しており、Startup.csクラスの標準的な登録メソッドを使用してサービスを登録しています。ASP.NetコアDIコンテナからサービスを取得
IServiceCollection内の登録済みサービスにアクセスして、特定のサービスインスタンスを見つけるために反復処理する必要があります。
これはASP.Net Core DIコンテナでどうすればできますか?私はコントローラの外でこれを行う必要があります。
以下は私がしようとしているものの例です。 すべての方法は、それは私がを把握しようとしているものだ、ServiceCollection上に存在しないことに注意してください:
多くのトライアル終了エラーの後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);
}
}
}
はそれが正しい、あなたのDIコンテナにそれを登録することでEventContainer' 'のコンストラクタで' IServiceCollection'を注入しようということですか? – larsbe
あなたは本当にそれを手動で繰り返す必要があります - なぜあなたはIServiceProviderを使いたくありません:serviceProvider.GetService>()? –
私のイベントハンドラには、いくつかの型が関連付けられている可能性があります。 EmailHandler、PushNotificationHandlerなど –