DI 使用 Ninject
DI using Ninject
我对DI一头雾水。我看过很多解释 DI 可以使用构造函数实现的文章,还有一些文章提到使用 ninject 实现 DI。所以我无法理解 ninject 的用法。如果 ninject 不存在,那么代码也可以工作。您能否解释一下使用 ninject 的优势是什么?
Quoting Darin Dimitrov
使用 Ninject 为我提供了哪些我无法做到的事情
遵循松散耦合的基本原则?
Composition Root
中的代码行更少
- 用于处理对象生命周期的标准容器
- 许多用于在特定上下文中注入的插件,例如经典 WebForms、ASP.NET MVC、ASP.NET Web API
- 可以自动处理您的 IDIsposable 对象
- ...
否则您应该手动处理的所有事情。话虽如此,DI 框架并不重要。它应该很快,并提供您的应用程序所需的特定功能。但是 DI 框架绝对不应该以松散耦合的方式影响您设计代码和应用程序中不同层的方式(针对接口和抽象 类 编程以削弱您的不同层之间的耦合申请)。
因此,请将 DI 框架视为仅干预您的应用程序的组合根的东西,并将其视为您可以在眨眼之间用不同的框架替换甚至手动处理对象生命周期的框架。
例如,您在问题中显示的代码非常糟糕,因为它将您的层绑定到特定的 DI 框架。那边的这个[Inject]
属性就像癌症一样。这意味着您的应用程序代码依赖于特定的 DI 框架。
此外,我建议您阅读这篇文章 book。
我对DI一头雾水。我看过很多解释 DI 可以使用构造函数实现的文章,还有一些文章提到使用 ninject 实现 DI。所以我无法理解 ninject 的用法。如果 ninject 不存在,那么代码也可以工作。您能否解释一下使用 ninject 的优势是什么?
Quoting
Darin Dimitrov
使用 Ninject 为我提供了哪些我无法做到的事情 遵循松散耦合的基本原则?
Composition Root
中的代码行更少
- 用于处理对象生命周期的标准容器
- 许多用于在特定上下文中注入的插件,例如经典 WebForms、ASP.NET MVC、ASP.NET Web API
- 可以自动处理您的 IDIsposable 对象
- ...
否则您应该手动处理的所有事情。话虽如此,DI 框架并不重要。它应该很快,并提供您的应用程序所需的特定功能。但是 DI 框架绝对不应该以松散耦合的方式影响您设计代码和应用程序中不同层的方式(针对接口和抽象 类 编程以削弱您的不同层之间的耦合申请)。
因此,请将 DI 框架视为仅干预您的应用程序的组合根的东西,并将其视为您可以在眨眼之间用不同的框架替换甚至手动处理对象生命周期的框架。
例如,您在问题中显示的代码非常糟糕,因为它将您的层绑定到特定的 DI 框架。那边的这个[Inject]
属性就像癌症一样。这意味着您的应用程序代码依赖于特定的 DI 框架。
此外,我建议您阅读这篇文章 book。