【问题标题】:How to scan for all implementations of a generic type with Ninject如何使用 Ninject 扫描泛型类型的所有实现
【发布时间】:2012-12-18 19:48:07
【问题描述】:

我们正在使用域事件模式并依靠我们的 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>();

【问题讨论】:

    标签: c# ninject


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!那是为我做的。顺便说一句,你的博客对我帮助很大。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-28
      • 1970-01-01
      相关资源
      最近更新 更多