Ninject - >扫描程序集以匹配接口并作为模块加载

Acr*_*gma 6 c# dependency-injection ninject

在早期版本的Ninject.Extensions.Conventions中,很容易扫描目录以获取程序集,按接口过滤类,然后加载所有包含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");
     }
}
Run Code Online (Sandbox Code Playgroud)

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

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

有人有解决方案吗?

Bat*_*nit 4

仍然有https://github.com/ninject/ninject.extensions.conventions扩展。但是,界面已更改为以下内容:

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

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

var plugins = IResolutionRoot.GetAll<IPlugin>();
kernel.Load(plugins);
Run Code Online (Sandbox Code Playgroud)