2012-12-18 116 views
5

我們正在使用的域事件模式和學習我們的Io​​C容器上查找特定類型的事件處理程序:如何掃描泛型類型的所有實現與Ninject

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

Ninject約定擴展包完全符合我的需求。工作代碼如下:

kernel.Bind(x => x 
    .FromThisAssembly() 
    .SelectAllClasses().InheritedFrom(typeof(IHandleEvent<>)) 
    .BindSingleInterface());