簡體   English   中英

.NET 核心依賴注入解決問題

[英].NET Core Dependency Injection resolve question

在我啟動我的 WebApi 項目時,我得到了下一個代碼:

services.AddScoped<ICommandHandler<OpdrachtgeverToevoegenCommand>, OpdrachtgeverCommandHandler>();
services.AddScoped<ICommandHandler<OpdrachtgeverVerwijderenCommand>, OpdrachtgeverCommandHandler>();
services.AddScoped<ICommandHandler<OpdrachtgeverWijzigenCommand>, OpdrachtgeverCommandHandler>();

在我的項目中,我實現了這些接口。

現在我試圖通過使用以下命令找到此處理程序的正確實現:

這是尚未完成的代碼:

public static ICommandHandler<ICommand> GetHandler(IServiceProvider serviceProvider, ICommand command)
{
    if (serviceProvider == null) throw new ArgumentNullException(nameof(serviceProvider));
    if (command == null) throw new ArgumentNullException(nameof(serviceProvider));

    var handler = serviceProvider.GetRequiredService(command.GetType());
    return serviceProvider.GetRequiredService(command.GetType()) as ICommandHandler<ICommand>;
}

我知道command.GetType()返回正確的命令,但如何找到ICommandHandler<command.GetType()>實現?

您可以使用MakeGenericType動態創建您正在查找的類型:

   var handlerType = typeof(ICommandHandler<>).MakeGenericType(command.GetType());
   return (ICommandHandler<ICommand>) serviceProvider.GetRequiredService(handlerType);

但是,這會給您帶來問題,因為我假設ICommandHandler<>不是協變的。 您將無法將其轉換為ICommandHandler<ICommand>

最好將命令類型作為通用參數傳遞給方法。

public static ICommandHandler<TCommand> GetHandler<TCommand>(IServiceProvider serviceProvider, TCommand command)
{
    return serviceProvider.GetRequiredService<ICommandHandler<TCommand>>();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM