Dependency injection 国际奥委会、AOP等

Dependency injection 国际奥委会、AOP等,dependency-injection,inversion-of-control,ninject,spring.net,Dependency Injection,Inversion Of Control,Ninject,Spring.net,什么是IoC容器 什么是IoC/DI框架 为什么我们需要一个IoC/DI框架 IoC/DI和AOP之间是否存在任何关系 关于IoC和AOP,Spring.net/ninject是什么 詹姆斯·科瓦奇写了一篇精彩的文章,涵盖了你的许多问题。我建议你阅读这篇文章 Spring.Net、Ninject、Unity、Castle Windsor、Autofac都是IOC容器,它们可以以不同的方式进行配置,其中许多都支持AOP IOC/DI框架非常有用,因为它们提供了标准机制,例如,如果您正在招聘一名新的

什么是IoC容器

什么是IoC/DI框架

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


IoC/DI和AOP之间是否存在任何关系

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

詹姆斯·科瓦奇写了一篇精彩的文章,涵盖了你的许多问题。我建议你阅读这篇文章

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

IOC/DI框架非常有用,因为它们提供了标准机制,例如,如果您正在招聘一名新的开发人员,那么更容易说,我们使用这个框架,并将指向教程/帮助指南的链接传递给他们。同时,大型社区/公司对这些框架进行了尝试和测试


阅读本文和以上答案后,如果您的任何问题仍然没有得到回答,请告诉我,我将尽力提供进一步的帮助。

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

详细描述了Spring.NET使用AOP。我更熟悉基于Java的Spring版本,因此我不能绝对肯定Spring.NET目前只支持基于代理的AOP

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

尽管它确实指出:

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


从语义学的角度来看

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

方面被描述为是应用程序核心关注点的交叉部分。这意味着与核心关注点无关(你可以认为它们是“好东西”)。既然应用程序可以在没有方面的情况下运行,那么它们真的是依赖关系吗?例如,即使没有防盗装置,汽车仍然是汽车

(当然,这是从理论角度出发的。在现实世界中,安全等问题对适销产品的存在往往与核心问题本身一样至关重要。)


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

谢谢Peter!这真的很有帮助!IoC/DI和AOP之间有关系吗?在某种程度上有关系。如果您研究AOP,它主要应用于日志记录和横切关注点的安全权限样式。在日志记录的情况下,许多开发人员会将其与DI/IOC一起使用,以便他们可以切换日志记录提供程序(比如将log4net交换到企业库日志记录)。但真正的答案是,实现AOP不需要DI或IoC,而实现DI或IoC则不需要使用AOP。Microsoft Unity容器确实使用AOP和DI来指定依赖项。例如,如果您有一个包含服务的dll和一个包含数据访问代码的dll,则可以指定服务dll依赖于数据访问dll,从而指示unity加载数据访问dll并在尝试初始化服务dll之前对其进行初始化。DI/IoC的另一种风格是使用服务定位器模式。你可能也想研究一下。Martin Fowlers的博客中有很多关于这个话题的内容。toolkit已链接到他的以下博客。另请检查以下内容: