在PostSharp中,可以将单个参数的值修改为一个方法

本文关键字:修改 方法 一个 PostSharp 参数 单个 | 更新日期: 2023-09-27 18:28:51

我当前的方法可以限制对字符串的操作,但我需要更精细的粒度控制。我想做一些事情,比如,将元素设置为标题大小写,这只适用于一些参数,但为此,我需要能够在每个参数级别上进行操作。此方法无法检查单个参数的元数据,例如自定义属性?

(我知道有更好的方法来强制参数的一致格式,但这表明了我试图回答的问题)。

/// <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();
        }
    }

在PostSharp中,可以将单个参数的值修改为一个方法

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