2011-03-26 21 views
3

私はASP.NETアプリケーションで2つのタスクを達成したいと思っています。どちらもAOPフレームワークしかし、彼らは異なる性質の両方です:依存性注入のためのフレームワーク(MVCアプリケーションで)と単純なAOPタスク(属性を使用して)

  1. 私のコントローラおよびサービスに対する依存性の注入
  2. 私はカスタム属性NotNullAttributeを作成し、それを代わりにそれらのパラメータまたはプロパティ場合ArgumentNullExceptionを投げるのいくつかのメソッドのパラメータまたはプロパティをマークしていますヌルでした。私はAOPフレームワークをコンパイル時にこれらの属性をチェックし、代わりにスローの原因を追加したい。例は次のとおりです。

    //original code that I write 
    public void MyMethod([NotNull]string param1){ 
        //do something 
    } 
    

    //code actually being compiled - after AOF processing/weaning 
    public void MyMethod(string patam1){ 
        if(param1 == null){ 
         throw new ArgumentNullException("param1"); 
        } 
        //do something 
    } 
    

だから私は、私は単純に両方のこれらのタスクを実行することができますフレームワークを(さえ必ずしもAOPでなければならないが、私はそれがなければならないであろう推測しません)します。

私はいくつかの追加要件があります。VSに

  • 小さなフットプリント、1つのまたは2のアセンブリ
  • 統合を - 私はちょうどコンパイルするCtrl+F5を押すと、フレームワークは、それが動作したい、依存関係を注入し、例外を追加コードを投げずに私はそれについても知っています。私はコマンドラインなどからプリコンパイルを実行したくありません。
  • 例外のコード生成の生成クラスの作成を希望します。定期的な側面と同様。 XMLではなく、構成もありません(表記法も可)。依存関係の注入については、クラスも好きですが、XMLや別の設定ファイルは受け入れられますが、実際にはXMLを知らず、本当に好きではない誰かが使用するのに十分シンプルでなければなりません。

このようなフレームワークはありますか?彼らは何が賛否両論ですか?


EDIT:ああ、私は非常に重要と思うが忘れてしまった:フレームワークは自由のためにする必要があります。

答えて

5

私は個人的な経験はありませんが、私はLinfuがあなたの説明に合っていると思います。

それとは別に、あなたはダイナミック傍受でDIコンテナからAOPのような振る舞いを得ることができます - ここでの例です:http://blog.ploeh.dk/2010/09/20/InstrumentationWithDecoratorsAndInterceptors.aspx

次DIコンテナのサポート傍受ボックスのうち:

純粋なAOP(DIなし)は、PostSharpとすることができます。

+0

ありがとうございました。 PostSharpは最初にTが試みられたと思ったのですが、それは無料ではありません。 – drasto

+0

@drasto:PostSharpの重要なビットがありましたが、これは私が見た前回非常に自由でした - このスペースでは、有料のビットは、コアAOPを超えた非常に強力なものです(実際にあなたの状況に合っていれば、私はあなたのブラッシュオフを表現した方法のようにはできませんでした)。 –

+0

Poststartからの無料ビットあなたがやろうとしていることを達成するのに十分なものであり、byによって非常に堅実なフレームワークです。サイトにも良い例がたくさんあります。 – Perry