目前正在远离处理命令同步并将它们放置到消息总线上以便稍后处理它们但是在尝试加载命令而不是键入每个命令时返回真实类型时遇到问题
这是我到目前为止所拥有的,似乎工作正常
命令调度程序
public class CommandDispatcher : ICommandDispatcher
{
private readonly IBus _commandBus;
public CommandDispatcher(IBus commandBus)
{
_commandBus = commandBus;
}
public void Dispatch<TCommand>(TCommand command) where TCommand : ICommand
{
var messageType = typeof(TCommand);
_commandBus.Publish(messageType, command);
}
订阅命令
bus.Subscribe<CommandOne>("key", HandleCommand);
bus.Subscribe<CommandTwo>("key", HandleCommand);
处理消息
private void HandleCommand<TCommand>(TCommand command) where TCommand : ICommand
{
var handler = _container.Resolve<ICommandHandler<TCommand>>();
handler.Handle(command);
}
我基本上想按惯例解决我的消息,所以这就是我想要实现的目标,所以我不必键入每个命令类型,但在找回类型时遇到问题
var commandAssembly = Assembly.GetAssembly(typeof(ICommand));
var commands = commandAssembly.GetTypes().Where(x => typeof(ICommand).IsAssignableFrom(x));
foreach (var command in commands)
{
bus.Subscribe(command, "key", x =>
{
HandleCommand(x);
});
}
现在 x 只是一个我不能传递给 Handlecommand 方法的对象
我将 autofac 用于我的容器,将 easynetq 用于我的总线。