C#/.Net でアスペクト指向プログラミング (AOP) を実行するための最良/最も一般的な方法は何ですか?
5 に答える
- Castle のDynamicProxyは、CLR で AOP を実行するためにおそらく最もよく使用されるツールです。
- Spring フレームワーク
Spring.Aop
は、その名前空間を通じて AOP 機能も提供し ます。
Postsharpもよく知られています。「AOP を .NET に!」私はそれを使った経験はほとんどありませんが、見栄えがよく、一見の価値があります。
PostSharpは良いです。私はそれを約1年間使用しています。インストールは簡単で、それが可能にするほとんど神のような力を考えると、学習曲線はかなり浅い. さらに、開発者の活発なコミュニティと応答性の高い開発者の両方が存在するようです。
PostSharp ホームページでコード サンプルを確認してください。これらは、PostSharp で行われた単純な側面の良い例です。
Spring.Net AOP Framework を約 9 か月間使用しています。これは非常に強力であり、ウィービングはコンパイル時ではなく実行時に行われますが、使用中にパフォーマンスが低下することはないようです。注意すべき唯一のことは、アドバイスを適用するオブジェクトは Spring.Net AOP を認識する必要はありませんが、少なくとも 1 つのインターフェースを実装する必要があるということです。ちなみに、Spring.Net に関して一般的に優れているドキュメントには、この制限は将来のバージョンで削除されると記載されていますが、ロードマップは示されていません。
Spring.Net AOP では、Spring.Net フレームワークの残りの部分を使用する必要はなく、分離して使用できます。
私はいくつかの異なる種類のもののために、自分自身を転がして遊んできました。運が良かった。一般に、インターフェイスを作成し、それをクラスで実装してから、インターフェイスを実装するプロキシを作成し、必要な前提条件ステップを実行し、実際のオブジェクトのメソッドを呼び出し、必要な事後条件ステップを実行します。このアプローチに関する私の主な煩わしさの 1 つは、インターフェイスにコンストラクターを含めることができず、インターフェイスに静的メソッドを含めることもできないため、そのタイプのコードを配置する明確な場所がないことです。難しいのはコード生成です。IL を発行するか、コンパイルする必要がある C# を発行するためです。しかし、それは私のアプローチでした。そして、一度に 1 つの側面について考えることを余儀なくされました。「側面」を抽象化して、それらの用語で考えることができるようになりました。要するに、自分で作成するか、好きなツールセットを見つけてください。Eric Bodden のリスト。