2016-03-22 18 views
0

クラスライブラリでは、クラスライブラリの属性を使用して例外を処理しようとしています。 AOP(PostSharp)なしでやる方法はありますか?属性を持つクラスライブラリのハンドル例外

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] 
public class HandleError : Attribute 
{ 

    public void OnException(){ 
    try { 

    } 
    catch (Exception) { 

    }} 
} 

そして、私はこのような属性を装飾したいと思います。

[HandleError] 
public void SampleMethod() 
{ 
    throw new Exception(); 
} 
+1

あなたは反射銃を取って、それをあなたの足元に向けようとしています... –

+0

@DiligentKeyPresserそれはどういう意味ですか?意味を持たせてください。 –

+1

簡単に言えば、簡単にはできません。別のライブラリ(Spring.NETなど)のAOPを使用できます。唯一の違いは、実行時にSpring.NETが動作し、Postsharpはコンパイル時に動作することです。 – xanatos

答えて

2

簡単に言えば、簡単にはできません。別のライブラリ(for example Spring.NET)のAOPを使用することができます。唯一の違いは、実行時にSpring.NETが動作し、Postsharpはコンパイル時に動作することです。

PostSharpのようにコンパイル時にコードの書き換えを行うには、Fodyを使用することもできます。

例外のロギングを行いたいだけで、スタックから例外を削除する必要がない(「食べたり変更したくない」)場合、単純にFirstChanceExceptionハンドラを追加します。これは、属性の存在を確認するためにリフレクションを使用する必要があるため、これはかなり遅くなることに注意してください。また、スタックを歩きたい場合はさらに遅くなります! (そしてはるかに複雑な)

+0

ありがとうございます。あなたはクラスライブラリの例外を処理するために何を提案しますか?すべてのメソッドブロックでtry/catchを使用する必要がありますか? –

+2

@sss通常、私は "システム"例外を私のライブラリから "エスケープ"させ、呼び出し元に行きます。私がhttp通信を行うライブラリを作成し、基になるTCPクラスから例外を取得した場合、呼び出し元にこの例外を許可させます。私は他の例外を除いて "マスキング"例外を好きではありません。 – xanatos

+0

ありがとう...私は受け入れる... –

関連する問題