如果为mvc安装nuget Ninject包,它会将NinjectWebCommon.cs
文件放在App_Start文件夹中。
我理解此文件中99%的内容除了这一行:
kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
完整代码文件here on GitHub
在我看来,最好使用:
kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => bootstrapper.Kernel);
由于静态实例已经在文件的顶部定义,因此它将获得具有所有映射的内核。
经过一些谷歌搜索似乎这也很常见:
kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => ctx.Kernel);
样板代码的方式背后的原因是什么?
答案 0 :(得分:0)
的绑定
"Func<IKernel>>"
用于将新的IKernel实例注入Bootstrapper.Initialize方法。
创建新的Bootstrapper背后的想法是,Bootstrapper构造函数应该构建一个完全初始化的IKernel实例。该新实例将用于替换IKernel的旧实例。
假设似乎是,当调用Initialize方法时,您需要完全重置Bootstrapper实例中的IKernel实例,删除在调用Initialize之前添加的所有绑定。
因此,如果您想在应用程序启动时执行除重置内核以外的操作,则应该重新调整lambda表达式中的代码,以便内核以所需状态传递给Bootstrapper.Initialize。
我希望这有用。