我一直在玩AOP多年,但没有成为100%满意的解决方案。 AOP带有运行时编织的框架(如Spring.AOP)不能更改类的接口。 随着后编译时间框架像Postsharp(任何人都知道别人?)你可以。 检查此示例,它将INotifyPropertyChanged实现添加到您的类中。 - >http://www.postsharp.net/model/inotifypropertychangedAOP预编译时间编织?
这AOP功能真的很棒,但你在烦恼很快跑...... 如果你想托管组件内访问新的界面,你不能编译, 因为接口编译后添加。 所以你得到一个“PropertyChanged没有定义” - 错误。 因此,您必须将这个类分为另一个程序集,这样才能使用这些AOP优势。 我记得,我遇到了同样的“后编译时间” - 使用T4模板生成源代码,基于程序集的反映信息。 OK,所以后期编译时间有时候太晚了......
我在找的是一个解决方案,其中类的源代码是通过Visual Studio用户定义的工具解析的,然后在C#中生成代码,文件,在部分类中。 (所以所有的AOP应用类必须是部分)
所以它是一种“预编译时间AOP”。 这应该是明确可能的,并且可以通过使用NRefactory作为代码解析器来完成。 此外,Visual Studio会比这个后期编译修改更喜欢这个。
所以这个解决方案消除了编译后编织器的缺点。 但并不能给你AOP的所有功能。但是与AOP-Framework一起,这应该是令人厌恶的。
有没有人知道这样的框架,或讨论? 你觉得呢?
亲切的问候,托马斯
谢谢,恕我直言,这是对架构的影响,因为您在代码中添加了复杂性(= cast)。这是你问Anders Hejlsberg“打开编译器?”的一个要点吗? Quote:“来自代码合同的人可能会赞赏钩住编译器的能力,这种需求在很大程度上被忽略了。”来源:http://www.postsharp.net/blog/post/Anders-Hejlsberg-Dead-Body –