尝试构建 CQRS 解决方案时,我使用以下代码尝试查找 Handler 然后调用 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) {}
}
我是一名优秀的程序员,十分优秀!