2012-04-18 22 views
0

私は監査の作業をしています。属性を使用して、監査に記録する必要のあるパラメータを追加情報としてマークしています。しかし、何らかの理由で、属性が存在するかどうかを確認できないようです。パラメータの属性が表示されない

マイコード:

[Audit(AuditType.GetReport)] 
    public Stream GetReportStream([AuditParameter] Report report) 
    { 
    ... 
    } 

    [AttributeUsage(AttributeTargets.Parameter)] 
    public class AuditParameterAttribute : Attribute 
    { 
    } 

そして、私はそれを取得しようとしているインターセプタ内側:

foreach (ParameterInfo param in invocation.Method.GetParameters()) 
{ 
    var atts = CustomAttributeData.GetCustomAttributes (param); 
    if (param.IsDefined (typeof(AuditParameterAttribute), false)) 
    { 
     attributes.Add (param.Name, invocation.Arguments[param.Position].ToString()); 
    } 
} 

は私が仕事に何かを取得しようとするいくつかの余分な呼び出しに加える開始。なぜ余分なvar attsがそこにあるのですか? invocation変数には呼び出されたメソッドに関する情報があり、パラメータを表すParameterInfoオブジェクトを取得できます。しかし、何を試しても、カスタム属性を得ることはできません。

私はここで間違っていますか?

答えて

2

それは城を使うことで私の未熟な問題であったことが分かります。私はそれが私が探していた属性を持っていない呼び出されたクラスのインターフェイスに基づいてプロキシを経由していることに気づいた。だから私のコードをこれに変更する:

foreach (ParameterInfo param in invocation.MethodInvocationTarget.GetParameters()) 
{ 
    if (param.IsDefined (typeof(AuditParameterAttribute), false)) 
    { 
     attributes.Add (param.Name, invocation.Arguments[param.Position].ToString()); 
    } 
} 

Methodの代わりにMethodInvocationTargetを使用すると、問題が修正されました。

関連する問題