【发布时间】:2009-03-19 20:34:52
【问题描述】:
我了解Dependency Injection 的基本概念。与其拥有大量全局状态,不如将所需内容传递给各种对象的构造函数。
但我不明白这个概念如何应用于框架?依赖注入框架能为您做什么,什么时候应该使用?
【问题讨论】:
标签: dependency-injection frameworks
我了解Dependency Injection 的基本概念。与其拥有大量全局状态,不如将所需内容传递给各种对象的构造函数。
但我不明白这个概念如何应用于框架?依赖注入框架能为您做什么,什么时候应该使用?
【问题讨论】:
标签: dependency-injection frameworks
该框架会根据某种配置(无论是代码、XML 文件等)为您连接一切。
基本上是管道。
许多 DI 框架还包括面向方面的编程、对象生命周期管理等,但 DI 的基础是让您的应用程序启动并运行,对象之间相互通信。
另一种说法:DI 框架是一段代码,它调用构造函数并告诉整个事情在完成后运行:)
【讨论】:
我使用它的主要目的是让我无需重新编译即可插入对象的新实现。我只需更改一个配置文件,我的对象就会正确连接在一起。
【讨论】:
了解它们的用途的最佳方法是尝试一些。我一直想试试Spring.NET,它看起来是一个很好的实现。
【讨论】:
我真正喜欢 AOP 的一点是它非常容易在开发版本和生产版本之间切换。您可以创建非常详细的日志记录,然后基本上翻转一个 xml 开关,它就消失了。
【讨论】:
使用 DI/IOC 的主要优点之一是减少不同类之间的耦合。
当您使用该方法时,您必须配置对象的层次结构,这些层次结构表达了您从它们的代码中取出的依赖关系。这可以变成很多代码。即使你使用 DI 框架的代码部分,它也可以让你以更具表现力的方式进行配置,从而大大减少配置量:
我使用的几个结构图配置:
ForRequestedType<ILogger>().TheDefaultIsConcreteType<NLogLogger>();
//the following injects any property that has a type
//that implements IController. (overcomes a regular asp.net limitation with DI)
SetAllProperties(
p => p.TypeMatches(t => t.IsConcreteAndAssignableTo(typeof(IController)))
);
【讨论】: