在此处查看演示CQRS代码,命令和事件处理程序分别连接如下:
public interface CommandHandler<in T>
{
void Handle(T command);
}
public interface EventHandler<in T>
{
void Handle(T @event);
}
bus = BusSetup.StartWith<Conservative>()
.Apply<FlexibleSubscribeAdapter>(a =>
{
a.ByInterface(typeof(IHandleEvent<>));
a.ByInterface(typeof(IHandleCommand<>));
})
.Construct();
Run Code Online (Sandbox Code Playgroud)
我正在使用一个与membus挂钩的IoC容器,它通过实现IEnumerable<object> GetAllInstances(Type desiredType)与容器的接口实现梦想,但是与使用这种注册方法的演示不同,我无法拆分单独命令和事件的接口:
this.Bus = BusSetup.StartWith<Conservative>()
.Apply <IoCSupport>(c =>
{
c
.SetAdapter(SimpleInjectorWiring.Instance)
.SetHandlerInterface(typeof(CommandHandler<>))
/*.SetHandlerInterface(typeof(EventHandler<>))*/;
// only CommandHandler or EventHandler can be used - not both
})
.Construct();
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我,如果有任何方法,所以我们可以注册任意数量的类型?
恐怕当前版本的 MemBus 无法做到这一点 - 请注意,没有特殊原因。我知道区分事件和命令是有意义的,即使底层基础设施是相同的。
目前唯一的解决方法是使用单个接口将 IOC 连接到 MemBus。
如果应该将这样的功能引入 MemBus,则必须考虑 IOC 容器的查找机制应该是什么样子。它可能必须请求所有接口的所有处理程序,或者必须引入某种对事件和命令“消息”进行分类/区分的方法。