C# 加载模块时出错';Ninject.Web.Mvc.MvcModule';MVC模块类型
我正在构建一个ASP.NET MVC5 web应用程序,将Ninject.MVC5用于DI。我正在尝试将NinjectWebCommon类移动到一个单独的类库项目中。通过使用以下代码,我成功地做到了这一点:C# 加载模块时出错';Ninject.Web.Mvc.MvcModule';MVC模块类型,c#,asp.net,asp.net-mvc,ninject,ninject.web.mvc,C#,Asp.net,Asp.net Mvc,Ninject,Ninject.web.mvc,我正在构建一个ASP.NET MVC5 web应用程序,将Ninject.MVC5用于DI。我正在尝试将NinjectWebCommon类移动到一个单独的类库项目中。通过使用以下代码,我成功地做到了这一点: private static IKernel CreateKernel() { var kernel = new StandardKernel(); try { // Uncomment to move this file to a separate
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
try
{
// Uncomment to move this file to a separate DLL
kernel.Load("MyWebApp.dll");
kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
RegisterServices(kernel);
return kernel;
}
catch
{
kernel.Dispose();
throw;
}
}
但是,如果我使用此代码而不是硬编码的引用,我会收到以下异常(在上面的throw
行捕获并重新抛出):
任何人都可以提供一些信息,说明这里发生了什么,以及如何在避免硬编码引用其他程序集的同时防止发生此异常?创建内核时,需要确保设置
LoadExtensions
设置为false
根据文件:
LoadExtensions:获取或设置一个值,该值指示内核
应该在启动时自动加载扩展
以下一行:
var kernel = new StandardKernel();
。。。应该是这样的:
var kernel = new StandardKernel(new NinjectSettings() { LoadExtensions = false });
AppDomain.CurrentDomain
仅包含已加载到域中的程序集-通常情况下,这不是\bin文件夹中的所有DLL。如果您可以引用MyWebApp.dll
,那么您可以只使用typeof(SomeClassInsideMyWebApp.Assembly
。这对我来说是可行的,但是为什么这样做以及何时将此属性设置为true
?是的。。为什么这会是一个很好的补充!!
var kernel = new StandardKernel();
var kernel = new StandardKernel(new NinjectSettings() { LoadExtensions = false });