2012-03-22 12 views
2

私の現在のメソッドは、文字列を操作する操作を制限できますが、より細かい穀粒制御が必要です。私は、いくつかのパラメータにのみ適用可能なタイトルケースに要素を設定するようなことをしたいが、これに対してはパラメータレベルごとに操作できる必要がある。このメソッドは、カスタム属性などの単一のパラメータのメタデータをチェックする方法を提供していませんか?PostSharpでは、メソッドに対する単一の引数の値を変更することは可能ですか?

(私はパラメータの一貫したフォーマットを実行するためのより良い方法がありますが、これは私が答えようとしている質問を示しています)。

/// <summary> 
    /// Checks all string parameters on a method and trims the input if 
    /// a non null string is identified. 
    /// </summary> 
    [Serializable] 
    public class TrimAllStringInputsAspect : MethodInterceptionAspect 
    { 
     public override void OnInvoke(MethodInterceptionArgs args) 
     { 
      for (int i = 0; i < args.Arguments.Count; i++) 
      { 
       var argVal = args.Arguments.GetArgument(i); 

       if (argVal != null) 
       { 
        if (argVal is String) 
        { 
         args.Arguments.SetArgument(i, argVal.ToString().Trim()); 
        } 
       } 
      } 

      args.Proceed(); 
     } 
    } 

答えて

2

MethodInterceptionAspectは、入力パラメータを変更する唯一の方法です。メタデータにアクセスする必要がある場合は、args.MethodからMethodBaseを取得するか、適切なメタデータロジックをCompileTimeInitializeに実装し、その結果をフィールドに格納して、作成時のアスペクトでシリアル化され、実行時に非直列化されます。

+0

ありがとうございました。 – gb2d

関連する問題