[英].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.