在PostSharp中是否可以修改方法的单个参数的值?

时间:2012-03-22 11:03:48

标签: c# 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();
        }
    }

1 个答案:

答案 0 :(得分:2)

MethodInterceptionAspect是更改输入参数的唯一方法。如果您需要访问元数据,可以从args.Method获取MethodBase,或者更好,您可以在CompileTimeInitialize中实现正确的元数据逻辑,并将结果存储在一个字段中,该字段将在构建时使用方面进行序列化。在运行时反序列化。