私は何年も AOP を使ってきましたが、ソリューションに 100% 満足することはできませんでした。Spring.AOP のようなランタイム ウィービングを使用する AOP フレームワークは、クラスのインターフェイスを変更できません。Postsharp のようなポスト コンパイル タイム フレームワーク (他の誰かを知っている人はいますか?) を使用すると、それが可能になります。このサンプルを確認してください。クラスに INotifyPropertyChanged 実装が追加されます。-> http://www.postsharp.net/model/inotifypropertychanged
この AOP 機能は非常に優れていますが、すぐに問題が発生します...ホスティング アセンブリ内の新しいインターフェイスにアクセスしたい場合、インターフェイスはコンパイル後に追加されるため、コンパイルできません。そのため、「PropertyChanged が定義されていません」というエラーが発生します。したがって、クラスを別のアセンブリに分離することで、これを回避する必要があります。これにより、これらの AOP の利点を利用できます。アセンブリの反映された情報に基づいてソース コードを生成する T4 テンプレートを使用して、同じ「コンパイル後」の問題に遭遇したことを覚えています。OKなので、コンパイル後の時間が遅すぎる場合があります...
私が探しているのは、クラスのソース コードがビジュアル スタジオのユーザー定義ツールを介して解析され、部分クラスの C# ファイルにコードが生成されるソリューションです。(したがって、すべての AOP 適用クラスは部分的でなければなりません)
つまり、「プリコンパイル時 AOP」のようなものです。これは間違いなく可能であり、NRefactory をコード パーサーとして使用することで実行できます。さらに、Visual Studio は、コンパイル後の変更よりも、これをはるかに望んでいます。
したがって、このソリューションは、コンパイル後のウィーバーの欠点を解消します。ただし、AOP のすべての機能が提供されるわけではありません。しかし、AOP フレームワークと合わせれば、これは素晴らしいことです。
このようなフレームワークやディスカッションを知っている人はいますか?! どう思いますか ?
よろしく、トーマス