具有membus和ioc容器的SetHandlerInterface()的多个类型

g18*_*18c 6 cqrs membus

此处查看演示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)

任何人都可以告诉我,如果有任何方法,所以我们可以注册任意数量的类型?

flq*_*flq 3

恐怕当前版本的 MemBus 无法做到这一点 - 请注意,没有特殊原因。我知道区分事件和命令是有意义的,即使底层基础设施是相同的。

目前唯一的解决方法是使用单个接口将 IOC 连接到 MemBus。

如果应该将这样的功能引入 MemBus,则必须考虑 IOC 容器的查找机制应该是什么样子。它可能必须请求所有接口的所有处理程序,或者必须引入某种对事件和命令“消息”进行分类/区分的方法。