Postsharp MethodInterceptionAspect получить значение метода, возвращаемое
У меня есть реализация MethodInterceptionAspect
(PostSharp) но когда я в переопределении OnInvoke
метод, args.Method
NULL, мне нужно знать тип возвращаемого значения метода,
кто-нибудь знает о?
[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
}
1 ответ
Решение
PostSharp оптимизирует полученный код, поэтому, когда значение args.Method
нигде не используется, оптимизатор пропускает некоторые операции и принимает значение NULL в качестве значения.
Как только вы используете значение в своем коде, оно должно появиться.
Я также рекомендую вам сделать проверку использования в CompileTimeValidate
метод и выдать сообщение об ошибке времени сборки. Таким образом, вы поймаете возможную ошибку во время сборки. Смотрите http://doc.postsharp.net/aspect-validation.