IoC、AOP等更多内容

12

什么是IoC容器?

什么是IoC/DI框架?

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

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

在IoC和AOP方面,Spring.net / ninject是什么?


请查看此链接:https://dev59.com/JmUo5IYBdhLWcg3w5i5M - NoNaMe
3个回答

4

JMSA,

詹姆斯·科瓦克斯撰写了一篇精彩的文章,其中涵盖了您的许多问题,我建议阅读它这里

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

IOC/DI框架很有用,因为它们提供标准机制,例如如果您正在招聘新的开发人员,只需告诉他们我们使用这个框架,并传递给他们教程/帮助指南的链接就可以了。同时,这些框架是由大型社区/公司经过试验和测试的。

如果阅读了文章和上面的回答后仍有任何问题未得到解答,请告诉我,我会尽力提供进一步帮助。


IoC/DI和AOP之间有关系吗? - JMSA
在某种程度上,它们之间存在关联。如果您深入研究AOP,它主要用于类似记录日志和安全权限等交叉关注点。在记录日志方面,许多开发人员会与DI / IOC一起使用,以便可以切换日志提供程序(例如从log4net切换到企业库日志记录)。但真正的答案是,您不需要 DI 或 IoC 来实现 AOP,也不需要使用 AOP 来实现 DI 或 IoC。 - Peter
Microsoft Unity容器使用aop和DI来指定依赖关系。例如,如果您有一个包含服务的dll和一个包含数据访问代码的dll,您可以指定服务dll依赖于数据访问dll,因此指示Unity在尝试初始化服务dll之前加载数据访问dll并对其进行初始化。 - Peter
另一种 DI / IoC 的风格是使用服务定位器模式。你可能也想研究一下这个。Martin Fowler的博客上有很多关于这个主题的内容。toolkit已经在下面链接到了他的博客。 - Peter

3
从语义学的角度来看,依赖注入本身意味着一个依赖,即为构建或使用应用程序的“核心关注点”所需的内容。例如,没有发动机的汽车不是汽车。
切面被描述为与应用程序的核心关注点相交叉。这意味着它们既独立于核心关注点又不是关键因素(您可以将其视为“好事情”)。由于应用程序可以在没有切面的情况下运行,因此它们真的是依赖关系吗?例如,即使没有防盗锁,汽车仍然是汽车。
(当然,这是从理论角度来看的。在现实世界中,诸如安全之类的问题通常与核心关注点的存在一样重要,其影响力甚至超过了核心关注点本身。)
因此,在实践中,虽然DI可以用于实现切面,但我不会称这个过程为真正的DI。这是来自只使用构造函数注入的人的看法。

2
Martin Fowler在这里有一篇关于控制反转和依赖注入含义的好文章。
Spring.NET使用AOP在这里有详细描述。我更熟悉基于Java的Spring版本,所以不能确定Spring.NET目前仅支持基于代理的AOP。
也就是说,要被提醒的类必须实现一个接口。Spring将创建一个动态代理来实现这个接口并委托给原始目标实例。
虽然它确实说明了:
“在未来的版本中,我们将实现使用继承的代理,这将允许您代理没有接口的类,并将删除一些无法使用基于组合的代理解决的剩余原始引用问题。”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接