在 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");
}
}
然而,在我最近更新到最新版本之后,一切似乎都消失了,我无法
- 自动加载模块
- 按接口(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/