为什么AOP和DI不经常一起使用

时间:2014-07-15 04:01:26

标签: dependency-injection aop

我对此行感到困惑

  

面向方面的编程和依赖注入是非常不同的概念,但是它们很好地适合在一起。

来自这个网站

http://www.postsharp.net/blog/post/Aspect-Oriented-Programming-vs-Dependency-Injection

我理解DI优于AOP的优点,但为什么不是经常一起使用?为什么只有有限的情况它们组合在一起?是因为编译AOP的方式,这使得使用两者都很困难吗?

1 个答案:

答案 0 :(得分:2)

您如何定义“有限案例”?我自己总是一起使用AOP和DI。

基本上有三种方法可以应用AOP:

  1. 使用PostSharp等代码编织工具。
  2. 使用Castle Dynamic Proxy等拦截工具。
  3. 使用装饰器。
  4. DI与代码编织工具的使用不能很好地混合和匹配,我认为这就是Postsharp网站声明“它们很适合在一起的有限情况”的原因。它不混合和匹配的一个原因是因为依赖注入是松散耦合,而代码编织在编译时将代码和方面紧密耦合在一起。

    如果您使用拦截(这意味着在运行时类型生成期间应用横切关注点),它可以很好地与DI配合使用,并且可以轻松地与大多数DI库集成。

    我个人的偏好是使用装饰器。 My systemsdesigned aroundfew well defined通用抽象,这使我能够在几乎所有对我的系统都很重要的地方应用横切关注点。这让我在非常罕见的情况下有一些装饰器不能很好地工作的地方,但这几乎总是由设计缺陷引起的。要么是我自己作为开发人员的限制,要么是.NET框架或其他工具中的设计缺陷。一个着名的设计缺陷是INotifyPropertyChanged界面。