我和 AOP 一起玩了很多年,但对解决方案并没有 100% 满意。具有运行时编织的 AOP 框架,如 Spring.AOP,不能更改类的接口。使用 Postsharp 之类的后编译时框架(有人认识其他人吗?),您可以。查看此示例,它将 INotifyPropertyChanged 实现添加到您的类中。-> http://www.postsharp.net/model/inotifypropertychanged
这个 AOP 特性确实很棒,但是你很快就会遇到麻烦……如果你想访问宿主程序集中的新接口,你不能编译,因为接口是在编译后添加的。所以你得到一个“未定义PropertyChanged”-错误。因此,您必须通过将类分离到另一个程序集中来解决这个问题,这样您就可以利用这些 AOP 优势。我记得,我遇到了相同的“后编译时间”——使用基于程序集的反射信息生成源代码的 T4 模板的问题。好的,所以后编译时间有时为时已晚......
我正在寻找的是一种解决方案,其中类的源代码通过 Visual Studio 用户定义的工具进行解析,然后在 C# 文件中的部分类中生成代码。(所以所有 AOP 应用的类都必须是部分的)
所以它是一种“预编译时AOP”。这绝对是可能的,并且可以通过使用 NRefactory 作为代码解析器来完成。此外,Visual Studio 更希望这样,而不是编译后修改。
所以这个解决方案消除了编译后编织器的缺点。但不会为您提供 AOP 的所有功能。但是与 AOP-Framework 一起使用,这应该很不错。
有谁知道这样的框架,或者讨论?!你怎么看 ?
亲切的问候,托马斯