了解Ninject mvc 3锅炉板代码

时间:2014-06-11 16:04:07

标签: c# asp.net-mvc dependency-injection ninject

如果为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);

样板代码的方式背后的原因是什么?

1 个答案:

答案 0 :(得分:0)

的绑定
"Func<IKernel>>"

用于将新的IKernel实例注入Bootstrapper.Initialize方法。

创建新的Bootstrapper背后的想法是,Bootstrapper构造函数应该构建一个完全初始化的IKernel实例。该新实例将用于替换IKernel的旧实例。

假设似乎是,当调用Initialize方法时,您需要完全重置Bootstrapper实例中的IKernel实例,删除在调用Initialize之前添加的所有绑定。

因此,如果您想在应用程序启动时执行除重置内核以外的操作,则应该重新调整lambda表达式中的代码,以便内核以所需状态传递给Bootstrapper.Initialize。

我希望这有用。