就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、参考资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,访问帮助中心 /help/reopen-questions 以获得指导。
我有一个 ASP.NET 3.5 SP1 Webforms 应用程序。我将 MVP 模式(监督控制器)与 DI (autofac) 结合使用。我的演示者调用我的域 (DDD) 中定义的存储库合约,这些合约在基础设施项目中实现。
演示者调用的存储库方法可能会中断,因此我需要记录异常,然后在视图上设置错误消息。
过去我会添加another Presenter 构造函数的参数,将引用存储在 Base Presenter 中,并在我的 Catch 块中调用 Log 方法。我不太喜欢这个,但它可以完成工作。
我可以使用工厂来获取日志记录类如此处所述 http://jeffreypalermo.com/blog/constructor-over-injection-anti-pattern/ ,但我想先探索一下 AOP,因为它看起来很有趣。
我已经阅读了编译时与运行时 AOP 的内容,我想知道人们对不同解决方案的体验、优点、缺点、建议等。
从我所做的挖掘来看,.NET 中的 AOP 似乎有 4 个主要框架
温莎城堡 - 我一般都远离这个,因为它做了很多我真的不需要的东西
Spring.net - 听起来它有良好的记录,但通过它的 xml 配置激发了恐惧(我不喜欢非流畅的配置)
PostSharp - 属性驱动(我喜欢这个),但在某一时刻有一些行号问题 https://stackoverflow.com/questions/62798/applying-aop/94083#94083 ,不确定它们是否仍然存在
Unity——一大堆我并不真正需要的东西
I see 另一个问题 https://stackoverflow.com/questions/62798/applying-aop 有一些很好的答案,但那是一年半前的事了。同时是否开发了更新的、“更好的”框架,或者应该考虑对现有解决方案进行了增强?
作为参考,我选择 Autofac 进行 DI,因为它流畅、使用简单,找不到任何关于它的负面评论,而且它确实有效。
有关于我应该尝试哪种 AOP 框架的建议吗?感谢您阅读所有这些内容并添加任何想法。
简而言之,为了简单性和易用性,使用 PostSharp 绝对不会出错。
更长的答案:在我看来,您应该根据您想要实现的目标在两个框架之间进行选择。
如果您希望各个方面根据上下文进行更改,请考虑 Spring.NET(或任何在运行时根据配置注入代码的 aop 框架)。这允许您根据您正在做的事情自定义对象的行为。例如,通过您的配置,您可以在控制台应用程序中使用一种日志记录类型,而在 Web 应用程序中使用另一种日志记录类型。请注意,Spring 也是一个 DI 容器(以及其他一些东西)——它远远超出了 AOP,并且绝对值得学习如何使用。
另一方面,如果你想要的行为应该always 无论上下文如何,都有效,那么 PostSharp(编译时编织)是您最好的选择。这实际上与您在应用该方面的每个方法中包含代码相同。
对于您正在做的事情,我建议您从 PostSharp 开始。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)