【发布时间】:2012-06-05 17:31:05
【问题描述】:
在尝试构建 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) {}
}
【问题讨论】:
-
烦人是什么意思?代码写好了..它的工作原理...
-
当我认为有更好的方法时,通过反射调用 Handle() 让我很困扰。
标签: c# generics reflection cqrs