使用C#建议AOP

blu*_*blu 10 c# asp.net aop domain-driven-design

我有一个ASP.NET 3.5 SP1 Webforms应用程序.我使用带有DI(autofac)的MVP模式(监督控制器).我的演示者调用我的域(DDD)中定义的存储库合同,这些合同在基础结构项目中实现.

演示者调用的存储库方法可以是hork,因此我需要记录异常,然后在View上设置错误消息.

在过去,我会添加另一个参数来演示构造函数,存储在基地演示参考,并叫我Catch块日志方法.我真的不喜欢这个,但它完成了工作.

我可以使用工厂来获取此处所述的日志记录类,但我想首先探索AOP,因为它看起来很有趣.

我已经完成了关于编译时与运行时AOP的阅读,并且我想知道人们对不同解决方案,优缺点,建议词等的经验.

从挖掘过程来看,似乎在.NET中有4个主要的AOP框架

  • 温莎城堡 - 我一般都远离这个,因为它做了很多我真的不需要的东西
  • Spring.net - 听起来它有良好的记录,但通过其xml配置激发了恐惧(我不喜欢非流畅的配置)
  • PostSharp - 属性驱动(我喜欢这个),但在某一点上有一些行号问题,不确定它们是否仍然存在
  • 团结 - 我真的不需要很多东西

我看到另一个问题有一些很好的答案,但是从一年半前开始.是否有更新的"更好"的框架在此期间开发,或者对现有解决方案进行了哪些改进应该加以考虑?

作为参考,我选择了Autofac for DI,因为它流畅,易于使用,找不到任何负面评论,它只是有效.

是否有关于我应该尝试哪种AOP框架的建议?感谢阅读所有这些并添加任何想法.

Nad*_*zie 4

简而言之,为了简单性和易用性,使用 PostSharp 绝对不会出错。

更长的答案:在我看来,您应该根据您想要实现的目标在两个框架之间进行选择。

如果您希望各个方面根据上下文进行更改,请考虑 Spring.NET(或任何在运行时根据配置注入代码的 aop 框架)。这允许您根据您正在做的事情自定义对象的行为。例如,通过您的配置,您可以在控制台应用程序中使用一种日志记录类型,而在 Web 应用程序中使用另一种日志记录类型。请注意,Spring 也是一个 DI 容器(以及其他一些东西)——它远远超出了 AOP,并且绝对值得学习如何使用。

另一方面,如果您希望行为始终有效,无论上下文如何,那么 PostSharp(编译时编织)是您的最佳选择。这实际上与您在应用该方面的每个方法中包含代码相同。

对于您正在做的事情,我建议您从 PostSharp 开始。