c# - 关于 C# 的 AOP 的建议

标签 c# asp.net domain-driven-design aop

<分区>

我有一个 ASP.NET 3.5 SP1 Webforms 应用程序。我将 MVP 模式(监督 Controller )与 DI(autofac)结合使用。我的演示者调用在我的域 (DDD) 中定义的存储库合约,这些合约在基础设施项目中实现。

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

在过去,我会向 Presenter 构造函数添加 另一个 参数,将引用存储在 Base Presenter 中,并在我的 Catch block 中调用 Log 方法。我不太喜欢这样,但它完成了工作。

我可以使用工厂获取日志类 as described here ,但我想先探索 AOP,因为它看起来很有趣。

我已经阅读了编译时 AOP 与运行时 AOP 的资料,我想知道人们对不同解决方案的体验、优点、缺点、建议等。

根据我所做的挖掘,.NET 中似乎有 4 个主要的 AOP 框架

  • 温莎城堡 - 我通常远离它,因为它做了很多我真的不需要的东西
  • Spring.net - 听起来它拥有良好的记录,但通过其 xml 配置激发了恐惧(我不喜欢不流畅的配置)
  • PostSharp - 属性驱动(我喜欢这个)但有一次 some line number issues , 不确定它们是否仍然存在
  • Unity - 很多我并不真正需要的东西

我看到 another question这有一些很好的答案,但它是一年半前的。是否有更新的、“更好的”同时开发的框架,或者对现有解决方案的改进应该考虑在内?

作为引用,我选择 Autofac 进行 DI,因为它流畅、易于使用,找不到任何关于它的负面评论,而且它很管用。

是否有关于我应该尝试使用哪种 AOP 框架的建议?感谢您阅读所有这些内容并提出任何想法。

最佳答案

简短的回答,为了简单易用,使用 PostSharp 真的不会出错。

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

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

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

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

关于c# - 关于 C# 的 AOP 的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2234293/

相关文章:

c# - 如何获取DataNavigateUrlFields 的值?

c# - 从 MEF 容器中移除

c# - HTMLControl Style.Add

c# - 如何在GridView的TemplateField中找到Control?

asp.net - 使用 Controller 中的 Hub 方法?

.net - 从MVC到MVVM

java - 领域驱动设计——CQRS + ES的使用

c# - 创建多个具有相同签名的 Web Api

c# - 字典中结构键的值相等和类键的引用相等

sql-server - 事件源和 SQL Server 多个关系表