不要将 dll 文件加载到 Ninject 内核
Dont load dll files to Ninject Kernel
我在我的 Mvc 应用程序中使用 Ninject 作为 DIP 并使用它,但我想使用以下代码将一些 dll 文件加载到 ReportController 中我的 Ninject 内核中:
private readonly IKernel _kernel;
public ReportController(IKernel kernel)
{
_kernel = kernel;
}
public ActionResult Index()
{
var directoryInfo = new DirectoryInfo(@"D:\Project\ReportDlls");
var modules = directoryInfo.GetFiles("*.dll");
foreach (var m in modules)
{
var assembly = Assembly.LoadFile(m.FullName);
_kernel.Load(assembly);
}
我从内核中读取了以下代码,但它的 return 空 routesProviders....为什么?
var routesProviders = _kernel.GetAll<IReport>();
foreach (var rp in routesProviders)
{
if (rp.GetType().Name == "DailyResult")
{
var f = rp.GetType();
}
}
我的接口是 IReport,我的 Dll 派生自 IReport,在 class 我的 dll 中的 IocModule 我写了 Kernel.Bind<IReport>().To<DailyResult>();
但它不起作用....???
IKernel扩展的方法Load()
,在你传递的程序集中搜索public的INinjectModule,并调用具体的Load()
方法,所以你必须包含在您传递了一些 INinjectModule 的任何程序集中,这些 INinjectModule 在 Load 方法中进行了绑定 Kernel.Bind<IReport>().To<DailyResult>();
。
见参考:https://github.com/ninject/Ninject/wiki/Modules-and-the-Kernel
或者你也可以这样做
var types= typeof(SomeClassInTheAssembly).Assembly;
kernel.Bind(syntax => syntax.From(types)
.SelectAllClasses()
.BindDefaultInterface()
.Configure(config => config.InRequestScope()));
而不是 _kernel.Load(assembly);
。
希望有用 X)
我在我的 Mvc 应用程序中使用 Ninject 作为 DIP 并使用它,但我想使用以下代码将一些 dll 文件加载到 ReportController 中我的 Ninject 内核中:
private readonly IKernel _kernel;
public ReportController(IKernel kernel)
{
_kernel = kernel;
}
public ActionResult Index()
{
var directoryInfo = new DirectoryInfo(@"D:\Project\ReportDlls");
var modules = directoryInfo.GetFiles("*.dll");
foreach (var m in modules)
{
var assembly = Assembly.LoadFile(m.FullName);
_kernel.Load(assembly);
}
我从内核中读取了以下代码,但它的 return 空 routesProviders....为什么?
var routesProviders = _kernel.GetAll<IReport>();
foreach (var rp in routesProviders)
{
if (rp.GetType().Name == "DailyResult")
{
var f = rp.GetType();
}
}
我的接口是 IReport,我的 Dll 派生自 IReport,在 class 我的 dll 中的 IocModule 我写了 Kernel.Bind<IReport>().To<DailyResult>();
但它不起作用....???
IKernel扩展的方法Load()
,在你传递的程序集中搜索public的INinjectModule,并调用具体的Load()
方法,所以你必须包含在您传递了一些 INinjectModule 的任何程序集中,这些 INinjectModule 在 Load 方法中进行了绑定 Kernel.Bind<IReport>().To<DailyResult>();
。
见参考:https://github.com/ninject/Ninject/wiki/Modules-and-the-Kernel
或者你也可以这样做
var types= typeof(SomeClassInTheAssembly).Assembly;
kernel.Bind(syntax => syntax.From(types)
.SelectAllClasses()
.BindDefaultInterface()
.Configure(config => config.InRequestScope()));
而不是 _kernel.Load(assembly);
。
希望有用 X)