我当前的方法可以限制操作字符串的操作,但我需要更精细的颗粒控制。我想做的事情,例如,将元素设置为标题大小写只适用于某些参数,但为此我需要能够在每个参数级别上操作。此方法无法检查单个参数的元数据,例如自定义属性?
(我知道有更好的方法来强制执行一致的参数格式,但这证明了我要回答的问题。)
/// <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();
}
}
答案 0 :(得分:2)
MethodInterceptionAspect是更改输入参数的唯一方法。如果您需要访问元数据,可以从args.Method
获取MethodBase,或者更好,您可以在CompileTimeInitialize中实现正确的元数据逻辑,并将结果存储在一个字段中,该字段将在构建时使用方面进行序列化。在运行时反序列化。