c# - 了解 Ninject mvc 3 样板代码

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

如果您为 mvc 安装 nuget Ninject 包,它会在 App_Start 文件夹中放置一个 NinjectWebCommon.cs 文件。

除了这一行,我理解了这个文件中 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);

样板代码之所以如此,背后的原因是什么?

最佳答案

绑定(bind)

"Func<IKernel>>"

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

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

假设似乎是,当调用 Initialize 方法时,您可能希望完全重置 Bootstrapper 实例中的 IKernel 实例,删除在调用 Initialize 之前添加的任何绑定(bind)。

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

希望对您有所帮助。

关于c# - 了解 Ninject mvc 3 样板代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24167578/

相关文章:

c# - .NET - 将多个字符串值映射到 XmlEnumAttribute

c# - 如何创建由开始和停止按钮控制的 CSV 文件

asp.net-mvc - ASP.NET MVC 4 Visual Studio 2010项目模板不存在

asp.net-mvc - jquery-ui 自动完成功能与 ASP MVC 建议不显示

c# - 使用 Func 和依赖注入(inject)的 Autofac 动态调用

c# - Node 上带有 HtmlUnit 的 WebDriver Grid 与 Node CPU Hook

c# - 控制台应用程序中的非终止全局异常处理程序

c# - 从 IList 迭代动态属性

c# - 私有(private)静态依赖与私有(private)依赖

javascript - angular - 为模块提供不同的服务