C# 加载模块时出错';Ninject.Web.Mvc.MvcModule';MVC模块类型

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

我正在构建一个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 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 });