试图构建一个 CQRS 解决方案,我有以下代码试图找到一个处理程序,然后调用一个 Handle() 方法。
下面的代码有效,但是当我们知道所有 IHandleCommand<> 都有一个 Handle 方法时使用反射很烦人,这可以在编译时解决,我相信!
我必须以dynamic
某种方式使用吗?
public void SendCommand(Command command)
{
Type handlerType = typeof(IHandleCommand<>).MakeGenericType(command.GetType());
object handler = container.Resolve(handlerType);
handler.GetType().GetMethod("Handle").Invoke(handler, new object[] { command });
}
这是上面使用的其他类型
public class Command {}
public class MyCommand : Command {}
public interface IHandleCommand<T>
{
void Handle(T command);
}
public class MyCommandHandler : IHandleCommand<MyCommand>
{
public void Handle(MyCommand command) {}
}