自定义Unity拦截行为或企业库块,哪个更适合AOP?

时间:2015-03-12 22:48:07

标签: asp.net-mvc-4 aop enterprise-library unity-interception cross-cutting-concerns

尝试确定我的MVC应用程序采用哪条路径,并希望遵循AOP方法。任何人都可以解释Unity Custom拦截行为的优缺点并使用Enterprise Library 6。

现实世界实施的经验和教训将非常有用,谢谢。

2 个答案:

答案 0 :(得分:0)

我认为AOP框架和Policy Injection模式之间存在一些混淆。有一件事是在Enterprise Library中使用处理程序管道,另一件事是在运行或编译时使用像Mono.Cecil或PostSharp这样的框架来更改程序的行为(即编织程序)。 / p>

来自MSDN网站:

  

自动创建代理的系统的实现   方法的处理程序管道类似于面向方面   编程(AOP)方法。但是,政策注入申请   Block不是以下的AOP框架实现   理由:

     
      
  • 它使用拦截来仅启用预处理处理程序   和后处理处理程序。
  •   
  • 它不会将代码插入方法中。
  •   
  • 它不为类构造函数提供拦截。
  •   

如果你想增加对交叉问题的支持,使用自定义拦截/策略注入是很好的,但它有一个保留配置(例如注册)你的拦截器(在大代码库中可能有问题)的缺点。您还应该考虑性能方面。自定义拦截由EL在内部使用RealProxy类在内部处理,该类使用反射来调用已注册的方法。

使用纯AOP解决方案会有所不同,因为IL代码被发出并注入,因此它也应具有更好的性能。

答案 1 :(得分:0)

如果我得到正确的方法,你想要实现MVC项目,其中对于IoC(依赖注入)你想要使用UNITY框架,它将为你的交叉问题注入人工制品,例如异常处理或记录你想使用企业库。为了减少代码和易用性,AOP就是您想要的。

下面是对不同的.Net框架进行比较,利弊的链接,其中Unity当然是其中之一。

http://fukyo-it.blogspot.com.ar/2012/10/comparing-net-di-ioc-frameworks.html

以不正确的方式使用unity会导致性能问题。请看下面谈到性能的链接。

http://www.palmmedia.de/blog/2011/8/30/ioc-container-benchmark-performance-comparison

我曾使用企业库(管道机制)来解决交叉问题,最初使用Unity for DI但后来切换到StructureMap,因为它更轻量级。