Postsharp MethodInterceptionAspect 获取方法 return 值
Postsharp MethodInterceptionAspect get method return value
我有一个 MethodInterceptionAspect
(PostSharp) 的实现
但是当我在 override OnInvoke
方法中时, args.Method
为空,
我需要知道方法 return 值类型,
有人知道吗?
[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
}
PostSharp 优化生成的代码,因此当 args.Method
的值未在任何地方使用时,优化器会跳过一些操作并将 null 作为值传递。
一旦您在代码中使用该值,该值就会出现。
我还建议您在 CompileTimeValidate
方法中进行使用验证并发出构建时错误消息。这样你会在构建时发现一个可能的错误。参见 http://doc.postsharp.net/aspect-validation。
我有一个 MethodInterceptionAspect
(PostSharp) 的实现
但是当我在 override OnInvoke
方法中时, args.Method
为空,
我需要知道方法 return 值类型,
有人知道吗?
[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
}
PostSharp 优化生成的代码,因此当 args.Method
的值未在任何地方使用时,优化器会跳过一些操作并将 null 作为值传递。
一旦您在代码中使用该值,该值就会出现。
我还建议您在 CompileTimeValidate
方法中进行使用验证并发出构建时错误消息。这样你会在构建时发现一个可能的错误。参见 http://doc.postsharp.net/aspect-validation。