我对此行感到困惑
面向方面的编程和依赖注入是非常不同的概念,但是它们很好地适合在一起。
来自这个网站
http://www.postsharp.net/blog/post/Aspect-Oriented-Programming-vs-Dependency-Injection
我理解DI优于AOP的优点,但为什么不是经常一起使用?为什么只有有限的情况它们组合在一起?是因为编译AOP的方式,这使得使用两者都很困难吗?
答案 0 :(得分:2)
您如何定义“有限案例”?我自己总是一起使用AOP和DI。
基本上有三种方法可以应用AOP:
DI与代码编织工具的使用不能很好地混合和匹配,我认为这就是Postsharp网站声明“它们很适合在一起的有限情况”的原因。它不混合和匹配的一个原因是因为依赖注入是松散耦合,而代码编织在编译时将代码和方面紧密耦合在一起。
如果您使用拦截(这意味着在运行时类型生成期间应用横切关注点),它可以很好地与DI配合使用,并且可以轻松地与大多数DI库集成。
我个人的偏好是使用装饰器。 My systems是designed around个few well defined通用抽象,这使我能够在几乎所有对我的系统都很重要的地方应用横切关注点。这让我在非常罕见的情况下有一些装饰器不能很好地工作的地方,但这几乎总是由设计缺陷引起的。要么是我自己作为开发人员的限制,要么是.NET框架或其他工具中的设计缺陷。一个着名的设计缺陷是INotifyPropertyChanged
界面。