我有MethodInterceptionAspect
(PostSharp)的实现
但是当我在覆盖OnInvoke
方法中时,args.Method
为空,
我需要知道方法返回值类型
[PSerializable]
public class PSHandleRequestAttribute : MethodInterceptionAspect
{
public PSHandleRequestAttribute(bool readOnly = true) : base()
{
ReadOnly = readOnly;
}
#region Properties
protected bool ReadOnly { get; set; }
#endregion Properties
#region Public Methods
public override void OnInvoke(MethodInterceptionArgs args)
{
var instance = args.Instance as IBusinessTransaction;
var method = args.Method;
if (instance.IsNull())
{
throw new Exception("Use PSHandleRequestAttribute only for IBusinessTransaction");
}
instance.OpenTransaction();
try
{
args.Proceed();
//base.OnInvoke(args);
instance.CommitTransaction();
return;
}
catch (Exception ex)
{
var errorMessage = instance.RollbackTransaction(ex);
return;
}
}
#endregion Public Methods
}
答案 0 :(得分:1)
PostSharp优化生成的代码,因此当任何地方都没有使用args.Method
的值时,优化器会跳过某些操作并将null作为值传递。
在代码中使用该值后,应显示该值。
我还建议您在CompileTimeValidate
方法中进行使用验证,并发出构建时错误消息。这样您就可以在构建时捕获可能的错误。请参阅http://doc.postsharp.net/aspect-validation。