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) {}
}