2012-03-22 60 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 2012-03-22 23:00:22

相关问题