私は何年もAOPと一緒に遊んでいましたが、解決策に100%満足していませんでした。 AOPランタイムウィービングを持つフレームワークは、Spring.AOPのように、クラスのインタフェースを変更することはできません。 ポスト・コンパイル時にPostsharp(誰かが誰かを知っていますか?)のようなフレームワークを使用できます。 このサンプルをチェックすると、クラスにINotifyPropertyChanged実装が追加されます。 - >あなたがホスティングアセンブリ内に新しいインターフェイスにアクセスする場合はインターフェースがコンパイル後に追加されるため、あなたは、 をコンパイルすることはできませんhttp://www.postsharp.net/model/inotifypropertychangedAOPコンパイルの時間は?
このAOP機能は本当に素晴らしいですが、あなたは非常にすぐにトラブルに実行... 。 "PropertyChanged is not defined"エラーが発生します。 したがって、クラスを別のアセンブリに分けることで、このようなAOPの利点を利用できるように、これを回避するのは厄介です。 アセンブリの反映された情報に基づいて、ソースコードを生成するT4-Templateを使用して、同じ「Postコンパイル時」の問題に遭遇しました。コンパイル時間が遅すぎることがあります...
私が探しているのは、クラスのソースコードがVisual Studioのユーザー定義ツールで解析されてから、C#ファイル、部分的なクラス。 (したがって、すべてのAOP適用クラスは部分的である必要があります)
「Pre-Compile-Time AOP」のようなものです。 これは間違いなく可能であり、NRefactoryをコードパーサーとして使用して行うことができます。 さらに、Visual Studioでは、コンパイル後の修正よりもずっとこのことが好きです。
このソリューションは、ポストコンパイル時の織り方の欠点を解消します。 しかし、AOPのすべての機能をあなたに与えるわけではありません。しかし、AOPフレームワークと一緒に、これは素晴らしいことです。
誰でもこのようなフレームワーク、またはディスカッションを知っていますか? あなたはどう思いますか?
種類について、PostSharpの場合はトーマス
ありがとう、私はあなたのコードに複雑さ(=キャスト)を追加するため、これはアーキテクチャへの影響です。 Anders Hejlsbergに「コンパイラーを開く」という尋ねたポイントの1つですか?引用:「コード契約の参加者は、おそらくコンパイラをフックする機能を評価していたでしょう。この必要性は大部分無視されています。出典:http://www.postsharp.net/blog/post/Anders-Hejlsberg-Dead-Body –