簡體   English   中英

如何使用Ninject掃描泛型類型的所有實現

[英]How to scan for all implementations of a generic type with Ninject

我們使用域事件模式並依靠我們的Io​​C容器來定位特定類型事件的處理程序:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM