[英]How to scan for all implementations of a generic type with Ninject
我們使用域事件模式並依靠我們的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>();
Ninject Conventions Extensions包完全符合我的需要。 工作代碼如下:
kernel.Bind(x => x
.FromThisAssembly()
.SelectAllClasses().InheritedFrom(typeof(IHandleEvent<>))
.BindSingleInterface());
試試Ninject Conventions Extensions 。 它按照慣例為Ninject提供配置。 在wiki中有很好的文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.