几个月前,我发现了 PostSharp,有一段时间,它很好。
但随后法律回复说他们不喜欢旧版本的许可证。然后部门告诉我,2.0 的价格高得无法接受(就我们需要的座位数量而言)……我非常失望,但并不灰心。不可能是唯一的这样的框架,我想。
我一直在寻找替代品,但其中大部分要么已死,要么维护不善(特别是在文档部门),要么用于学术用途,要么以上所有(我在看你 Aspect.Net)
然后我发现了 Spring.Net,有一段时间,它很好。
我一直在阅读文档,它继续描绘了似乎是 AOP 必杀技的优越画面。我不再锁定属性来标记我希望代码拦截发生的位置,但它可以在 XML 中进行配置,并且不需要重新编译对其进行更改。伟大的。
然后我查看了示例并在每个使用场景中看到了以下内容:
// Create AOP proxy using Spring.NET IoC container.
IApplicationContext ctx = ContextRegistry.GetContext();
ICommand command = (ICommand)ctx["myServiceCommand"];
command.Execute();
if (command.IsUndoCapable)
{
command.UnExecute();
}
为什么前两行代码必须存在?它毁了一切。这意味着我不能简单地为用户提供一组方面和属性或 XML 配置,他们可以通过在适当的方法/类/等上粘贴适当的属性或编辑 XML 中的匹配模式来使用它们。他们必须修改他们的程序逻辑才能完成这项工作!
在这种情况下,有没有办法让 Spring.Net 表现得像 PostSharp?(即用户只需要添加属性/XML 配置,不需要编辑任何方法的内容。
或者,是否有一个值得和有效的替代 PostSharp?我在 SO 上看到过一些类似这样的问题,但他们都没有真正想要取代 PostSharp,他们只是想补充它的功能。我需要全换。