我一直在使用一些基本的AOP风格解决方案来解决交叉问题,如安全性,日志记录,验证等.我的解决方案涉及Castle Windsor和DynamicProxy .我走了这条路,因为我可以使用基于Boo的DSL来应用所有内容,并保持我的代码清除属性.周末我被告知要看看PostSharp,因为它应该是一个"更好"的解决方案.我已经快速浏览了PostSharp,但是我被属性使用所拖延了.
有没有人尝试过两种解决方案,并愿意分享他们的经验?
PostSharp的一些小问题......
我使用PostSharp的一个问题是,在使用asp.net时,异常消息的行号由PostSharp注入到asssemblies中的IL指令的数量"out",因为PDB也没有被注入:-).
此外,如果没有在运行时可用的PostSharp程序集,则会发生运行时错误.使用Windsor,可以在以后关闭横切,而无需重新编译代码.
(希望这是有道理的)
我只看了很短的时间(至少)城堡 - 温莎,所以我不能对此发表评论,但我确实使用了postharp.
Postsharp通过编译时编织工作.它会为您的构建添加一个后编译步骤,修改代码.编译代码就好像您只是将横切问题编程到代码中一样.这比运行时编织更有效,并且由于使用了属性,Postsharp非常易于使用.我认为使用AOP的属性并不像将它用于DI那样有问题.但这只是我的个人品味.
但...
如果你已经使用城堡进行依赖注入,我没有看到你不应该将它用于AOP的原因.我认为虽然运行时的AOP比编译时慢一点,但它也更强大.AOP和DI在我看来是相关的概念,所以我认为两者都使用一个框架是个好主意.所以我可能会再次看看城堡的东西,下一个项目我需要AOP.