12

什么是 IoC 容器?

什么是 IoC/DI 框架?

为什么我们需要 IoC/DI 框架?

IoC/DI 和 AOP 之间有什么关系吗?

关于 IoC 和 AOP,Spring.net/ninject 是什么?

4

3 回答 3

4

JMSA,

James Kovacs 写了一篇很棒的文章,涵盖了你的许多问题,我建议在这里阅读

Spring.Net、Ninject、Unity、Castle Windsor、Autofac 都是 IOC 容器,可以通过不同的方式进行配置,其中许多也支持 AOP。

IOC/DI 框架很有用,因为它们提供了标准机制,例如,如果您正在雇用新开发人员,这很容易说,我们使用此框架并将链接传递给他们到教程/帮助指南。同时,这些框架经过大型社区/公司的试用和测试。

如果您在阅读文章和上述答案后仍有任何问题没有得到解答,请告诉我,我将尽我所能提供进一步的帮助。

于 2009-06-03T18:12:09.470 回答
3

从语义的角度...

依赖注入本身意味着依赖,即构建/使用所需的东西(应用程序的“核心关注点”)。例如,汽车不是没有发动机的汽车。

方面被描述为与应用程序的核心关注点相交叉。这意味着与核心关注点分开且不重要(您可以将它们视为“不错的选择”)。既然应用程序可以在没有方面的情况下运行,那么它们真的是依赖关系吗?例如,即使没有防盗锁,汽车仍然是汽车。

(当然,这是从理论的角度来看。在现实世界中,像安全这样的问题对于有销路的产品的存在通常与核心自身所关心的一样重要。)

因此,虽然在实践中 DI 可用于实现方面,但我不会将该过程称为真正的 DI。这来自专门使用构造函数注入的人。

于 2011-04-22T10:14:36.627 回答
2

Martin Fowler 在这里有一篇关于控制反转和依赖注入的含义的好文章。

Spring.NET 的使用 AOP 在这里详细描述。我对基于 Java 的 Spring 版本比较熟悉,所以我不能绝对肯定地说 Spring.NET 目前只支持基于代理的 AOP。

也就是说,要通知的类必须实现一个接口。Spring 将创建一个动态代理来实现此接口并委托给原始目标实例。

虽然它确实声明:

在未来的版本中,我们将使用继承实现代理,这将允许您代理没有接口的类,并将删除一些使用基于组合的代理无法解决的剩余原始引用问题。

于 2009-06-03T18:36:47.703 回答