在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();
}
}
args.Method
获取MethodBase,或者更好的方法是,可以在CompileTimeInitialize中实现适当的元数据逻辑,并将结果存储在字段中,该字段将在构建时与方面序列化,并在运行时反序列化。