0

Microsoft は C# での AOP のソリューションに取り組んでいますか? (実際の AOP) 代替手段は何ですか?

おまけの質問: Code Contracts は一種の AOP ですか?

4

3 に答える 3

2

PostSharpは別の代替手段です。完全に無料で使用できるわけではありませんが、使い始めるのは簡単です。

Microsoft がまだUnityプロジェクトに積極的に貢献しているかどうかはわかりません。たぶん、他の人がこれに光を当てることができます。

Code Contractsは (一種の) アスペクト指向プログラミングではありません。

于 2012-09-27T13:40:53.480 に答える
2

.net のほとんどの依存性注入フレームワークには、AOP 手法を使用する機能があります。個人的には、Ninject と Interceptor プラグインが使いやすく、サード パーティの属性などによるクラス汚染を必要としないので気に入っています。

Spring.net、Castle Windsor、および他の多くの DI フレームワークは、わずかに異なる構文とアプローチで同じ原則をサポートしていると言われています。一部は xml 駆動型で、一部は c# 駆動型であるため、コンパイル時の安全性を確保できます。

考慮すべきことの 1 つは、ほとんどの DI フレームワークがクラ​​ス プロキシを介してこれを行うため、メソッドが仮想である必要があり、実行時にクラス メソッドをプロキシし、その時点でインターセプトできることです。PostSharp が行うものである IL ウィービングなどの他のアプローチがいくつかありますが、これはプロキシよりも高速である可能性がありますが、それを裏付ける測定値はありません。

おまけの質問ビットは見ませんでした。私にとっては、明確な答えではないと思います。一般的に、ロギング、トランザクションなどの非機能的な懸念を分離する方法として AOP を使用しているため、使用方法に依存するためです。おそらくソースコードからの検証であるため、このロジックを外側から内側に追加するため、理想的には、ソースコードはAOPが発生していることを認識していません(ただし、ソースコードを結合するサードパーティの属性を使用している場合は常にそうとは限りませんAOP フレームワークに)。

コード コントラクトは、既存のクラスとインラインで記述したり、属性を介してフックしたり、実行時に完全に注入できると考えているため、懸念事項のログ記録と同様に、それらすべてをクラスに入れることができますが、AOP アプローチを使用する場合はそうしません。 . したがって、私にとってコード コントラクトは、何かを強制するための単なるツールであり、AOP のように使用することも、コードに埋め込むこともできます。

于 2012-09-27T13:42:17.633 に答える
0

代替として、あなたも使用することができますSpring AOP

リンク: http://static.springsource.org/spring/docs/2.0.x/reference/aop.html

注:私はUnityの方が好きです

于 2012-09-27T13:29:42.973 に答える