5

我们正在使用领域事件模式并依靠我们的 IoC 容器来定位特定类型事件的处理程序:

public interface IHandleEvent<TEvent> where TEvent : IEvent
{
    void Handle(TEvent evnt);
}

使用 StructureMap 我们可以扫描并注册所有实现上述接口的类型,如下所示:

Scan(cfg =>
{
    cfg.TheCallingAssembly();
    cfg.ConnectImplementationsToTypesClosing(typeof(IHandleEvent<>));
});

Ninject 有没有等价物?

目前我必须像这样单独绑定每个处理程序:

kernel.Bind<IHandleEvent<SomeEvent>>().To<EventHandler1>();
kernel.Bind<IHandleEvent<SomeEvent>>().To<EventHandler2>();
kernel.Bind<IHandleEvent<SomeOtherEvent>>().To<EventHandler3>();
4

2 回答 2

7

Ninject Conventions Extensions 包正是我所需要的。工作代码如下:

kernel.Bind(x => x
    .FromThisAssembly()
    .SelectAllClasses().InheritedFrom(typeof(IHandleEvent<>))
    .BindSingleInterface());
于 2012-12-19T13:46:50.530 回答
5

尝试Ninject 约定扩展。它为 Ninject 提供了一个约定俗成的配置。wiki 中有相当不错的文档。

于 2012-12-18T20:47:43.500 回答