c# - Ninject -> 扫描程序集以匹配接口(interface)并加载为模块

标签 c# dependency-injection ninject

在 Ninject.Extensions.Conventions 的早期版本中,扫描程序集的目录、按接口(interface)过滤类然后加载所有包含 ninject 模块的内容非常容易。

kernel.Scan(scanner =>
    scanner.FromAssembliesInPath(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location))
    scanner.AutoLoadModules();
    scanner.WhereTypeInheritsFrom<IPlugin>());

public class MyPlugin : NinjectModule, IPlugin {

     public override void Load() {
          Bind<IRepositoryFromPluginHost>().To<MyPluginImpl>().Named("special");
     }
}

然而,在我最近更新到最新版本之后,一切似乎都消失了,我无法

  1. 自动加载模块
  2. 按接口(interface)过滤类型

有人对此有解决方案吗?

最佳答案

还有https://github.com/ninject/ninject.extensions.conventions延期。 但是,界面已更改为以下内容:

kernel.Bind(x =>
{
    x.FromAssembliesInPath("somepath")
     .IncludingNonePublicTypes()
     .SelectAllClasses()
     .InheritedFrom<IPlugin>()
     .BindDefaultInterface() // Binds the default interface to them;
});

更新: 您如何使用约定扩展(如上所述)将所有 IPlugin 绑定(bind)到 IPlugin,然后执行以下操作:

var plugins = IResolutionRoot.GetAll<IPlugin>();
kernel.Load(plugins);

关于c# - Ninject -> 扫描程序集以匹配接口(interface)并加载为模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23628290/

相关文章:

c# - 我怎样才能把这个类写得完全通用,并根据一个请求返回不同的响应?

dependency-injection - Unity动态映射

asp.net - Ninject 在 Web 服务中注入(inject)服务接口(interface)

c# - 使用依赖注入(inject)将字典保存在应用程序中的位置

asp.net - 蜘蛛抓取期间与事务相关的各种 NHibernate 错误

c# - 是否可以使用 Ninject 注入(inject)显式实现的方法?

c# - 如何使用 LINQ 根据子项和比较器之间的交叉值过滤和操作结果?

c# - ODP.Net OracleConnection.Open 冷启动很慢

c# - 使用 DataGridViewCheckBoxColumn 更新 DatagridView

javascript - 将一个提供程序注入(inject)另一个提供程序,相同的模块 #1250