2017-02-10 14 views
1

カスタム属性でAOPを利用しようとしています。入力パラメータに基づいてメソッドの戻り値に影響を与えるカスタム属性を実装したいと思います。戻り値の属性を定義する方法があります。C#でメソッド入力パラメータにアクセスできる戻り値のカスタム属性

[return: CustomAttribute] 
public string Do(string param1) 
{ 
    // do something 
} 

しかし、この属性が適用されたときにどのように動作を追加するかを見つけることができませんでした。入力パラメータの値に基づいてコードを実行したい場合や、場合によっては出力値を変更することもできます。

答えて

2

C#はAOP関連の構文を提供しません。 [return: CustomAttribute]は、戻り値の型にメタデータ情報を追加します。それはまったく期待していることではありません。 AOPを利用するには、

  • のいずれかを指定する必要があります.AOPを使用できるように特別に設計された外部ライブラリを使用してください。このようなライブラリの例はnice listです。
  • コンテナを使用している場合は、AOPをサポートしている可能性があります。たとえば、StructureMap AOPに関連するドキュメントにはa linkがあります。
  • あなた自身でAOP機能を実装しようとするかもしれませんが、かなり難しいです(特にパフォーマンスが気になる場合)。
+0

私はこの答えを得るために準備ができていた...私の研究は、すでに.NETとC#は、AOP –

+1

まあのための準備ができていないことは完全に真実ではないことを教えてくれました。 :) .NETとC#はAOPでうまくいきます。アスペクトを使用するように明示的に設計された構文はありませんが、そのような機能を提供するライブラリがたくさんあります。私は[このリンク](http://stackoverflow.com/questions/633710/what-is-the-best-implementation-for-aop-in-net)を含めるように私の答えを編集しました。 –

0

あなたの結果を得る、醜い何かをする方法がありますが、それはうまいです...醜いです。

public class UglySolution 
{ 
    private static string _changedString; 

    private class CustomAttribute : Attribute 
    { 
     public CustomAttribute() 
     { 
      _changedString = "New"; 
     } 
    } 

    public class SomeClass 
    { 
     public SomeClass() 
     { 
      _changedString = "Original"; 
     } 

     [Custom] 
     public string GetValue() 
     { 
      typeof(SomeClass).GetMethod("GetValue").GetCustomAttributes(true).OfType<CustomAttribute>().First(); 
      return _changedString; 
     } 
    } 
} 
関連する問題