2009-04-07 4 views
4

私は、彼らがトランザクションとして処理されるべきであることを示すいくつかのメソッドにカスタム属性を適用したいと思います。一般的に、私はSystem.Attributeから継承してカスタム属性を作成する方法を知っているが、私は必要なものを行う方法を知りません。属性を使用してメソッドの動作を制御する方法は?

私の目標は、このようなものです:SaveDataを(場合... TransactionalMethod()属性は、それはのTransactionScopeに包まれたかのように動作方法になるだろう

try 
{ 
    using(TransactionScope scope = new TransactionScope()) 
    { 
     SaveData(someObject); 
     scope.Complete(); 
    } 
} 
catch 
{ 
    // handle the exception here 
} 

[TransactionalMethod()] 
public void SaveData(object someObject) 
{ 
    // ... maybe some processing here 
    // ... then the object gets saved to a database 
    someObject.Save(); 
} 

)メソッドが例外をスローすると、Usingの外側になり、scope.Completeは呼び出されません。

私はSaveDataを()が呼び出され、手動でその周りの文を使用してコードを追加しているすべてのインスタンスを検索する必要がありますする必要はありません。この現象を引き起こす属性を作成するにはどうすればよいですか?

答えて

4

Aspect.NETは同じ目的を果たす別のプロジェクトです

7

基本的にあなたがAspect-Oriented Programming(AOP)をします。

PostSharpを見てください - それはうまくこれを扱うことができます。他にもオプションがありますが、私はそれらを使用していません。

+0

あなたとあなたの速報、Jon Skeetを呪います!私はほぼ同じ投稿をしていました。私はPostSharpへのリンクを探していましたが、既にそこにいます。 – Randolpho

+0

あり、私はそれらを見なくても知っているいくつかのURLがあり、postsharp.orgはそのうちの一つです:) –

関連する問題