我有简单的代码: 公共接口ICommand {}
public class CommandA : ICommand {}
public class CommandB :ICommand{}
public interface IHandler<in TCommand> where TCommand: ICommand {
void Handle(TCommand command); }
public class Handler1: IHandler<CommandA> { public void Handle(CommandA command) {}}
public class Handler2: IHandler<CommandA> { public void Handle(CommandA c) {} }
public class Handler3: IHandler<CommandB> { public void Handle(CommandB c) {} }
public class Handler4: IHandler<CommandB> { public void Handle(CommandB c) {} }
}
我使用AsClosedTypesOf注册所有处理程序
builder.RegisterAssemblyTypes(myAssembly).AsClosedTypesOf(typeof(IHandler));
我还有调度程序类,它应该找到给定命令的所有处理程序并执行它们
public class Dispatcher {
void Dispatch<TCommand>(TCommand command) where TCommand : ICommand {
var handlers = context.Resolve<IEnumerable<IHandler<TCommand>>>();
foreach (var handler in handlers) { handler.Handle(command); }}}
我想要另一个调度程序,像这样的处理程序包装器:
public class ActorHandler<TCommand> where TCommand : ICommand {
private IHandler<TCommand> _handler;
public ActorHandler(IHandler<TCommand> handler){
_handler= handler;}
public void OnReceive(object obj) { var command =(TCommand)obj; _handler.Handle(command);}}
我如何自动为所有处理程序执行此操作?