在启动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()>
的实现?
答案 0 :(得分:2)
您可以使用import time
while True:
with open('Log.txt','a') as f:
print("This prints once a second.",file=f)
time.sleep(1)
动态创建您要查找的类型:
MakeGenericType
但是,这会给您带来问题,因为我假设 var handlerType = typeof(ICommandHandler<>).MakeGenericType(command.GetType());
return (ICommandHandler<ICommand>) serviceProvider.GetRequiredService(handlerType);
不是协变的。您将无法将其强制转换为ICommandHandler<>
。
最好将命令类型作为通用参数传递给方法。
ICommandHandler<ICommand>