我一直在玩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 –