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