[英]Dont load dll files to Ninject Kernel
我在Mvc App中使用Ninject For 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);
}
我用下面的代碼從內核中讀取內容,但返回空的routeProviders。...為什么?
var routesProviders = _kernel.GetAll<IReport>();
foreach (var rp in routesProviders)
{
if (rp.GetType().Name == "DailyResult")
{
var f = rp.GetType();
}
}
我的接口是IReport,我的Dll衍生自IReport,在dll中的Kernel.Bind<IReport>().To<DailyResult>();
類中,我寫了Kernel.Bind<IReport>().To<DailyResult>();
但是它不起作用.... ???
IKernel擴展的方法Load()
,在傳遞的程序集中搜索公共的INinjectModule,並調用具體的Load()
方法,因此,您必須在傳遞了使綁定Kernel.Bind<IReport>().To<DailyResult>();
任何程序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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.