2012-11-02 7 views
5

このようなものでなければならないと思います。属性{}キャッチ

public class HandleErrorAttribute : Attribute 
{ 
    public void Execute() 
    {  
     try 
     { 
      method.Execute(); 
     } 
     catch(Exception ex) 
     { 
      //log 
     } 
    } 
} 

これは可能ですか?

+1

、ありません。 AOPライブラリの1つで可能かもしれません。 http://www.sharpcrafters.com/aop.net – asawyer

+0

それは属性が何であるかではありません。 @asawyerが書き留めるように、ポストシャープはこれを許すことができます。将来のバージョンでは、コンパイラのリライト(別名Roslyn)のおかげで、このようなことが拡張の可能性があります。しかし、現時点では:いいえ –

+0

@MarcGravell、これはRoslynのために組み込まれると思いますか?それとも、オープンソースプロジェクトを構築する必要があると思いますか? –

答えて

3

あなたはPostSharpのようなものを探しています。実装する価値があります。しかし、実装はこの質問の範囲をはるかに超えています。このlinkを見ると、あなたが望むだけのことをしていることがわかります。

だから、PostSharpをダウンロードして始めてください。さらに質問がある場合は、お手伝いできます。しかし、そのドキュメントは非常に優れており、実装するにはケーキです。

[Serializable] 
public class MyExceptionHandling : OnMethodBoundaryAspect 
{ 
    public override void OnException(MethodExecutionArgs args) 
    { 
     // here you would perform the logging 
    } 
} 

その後、あなたの方法であなたは新しい属性でそれをマークアップします:現在の枠組みでは

public class Foo 
{ 
    [MyExceptionHandling] 
    public void Do(){} 
    [MyExceptionHandling] 
    public void Don(){} 
} 
+0

この属性はpostsharpを使ってどのように書かれますか? – Omu

+0

@ChuckNorrisは、 'OnException'メソッドを実装することで、PostSharpで' try-catch'ブロックにラップされ、PostSharpで処理できるようにします。 –

+0

大丈夫ですので、OnExceptionの内部にスローしないと、例外はさらに進まなくなります – Omu