如何使用PostSharp停止方法的执行?

Bry*_*can 2 c# aop postsharp

目前,我正在尝试开发一种解决方案,该方法将检查方法是否已执行以及自上次执行以来是否经过了一段时间(鉴于该方法已经过去并且时间已过去),我想从OnEntry方法跳转到OnExit,而无需实际从方法本身执行任何代码。

有点 :

public class CacheThisMethod : OnMethodBoundaryAspect
{
            public override void OnEntry(MethodExecutionArgs args)
            {
               if (isCached( args.Method.name)
                   {
                    args.MethodExecutionTag =  getReturnValue(args.Method.name)
                    //jump to OnExit
                   }
               else
                   {
                    //continue
                   }
            }
            public override void OnExit(MethodExecutionArgs args)
            {
               args.Method.ReturnValue = args.MethodExecutionTag;


             }
}
Run Code Online (Sandbox Code Playgroud)

我该如何实现?谢谢。

swe*_*tfa 5

对代码的以下修改显示了如何获得所需的内容。

public class CacheThisMethod : OnMethodBoundaryAspect
{
        public override void OnEntry(MethodExecutionArgs args)
        {
           if (isCached( args.Method.name)
               {
                args.MethodExecutionTag =  getReturnValue(args.Method.name)
                OnExit(args);
               }
           else
               {
                //continue
               }
        }
        public override void OnExit(MethodExecutionArgs args)
        {
           //args.Method.ReturnValue = args.MethodExecutionTag;
            args.ReturnValue = args.MethodExecutionTag;
            args.FlowBehavior = FlowBehavior.Return;
        }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您正在使用每个方法的名称键,则可以对缓存的返回值使用简单的属性,因为将建议附加到方法时,将为您创建每个方面的单独实例。

如果没有理由跳转到OnExit,则只需在它调用OnExit方法的点添加FlowBehaviour并将返回值设置添加到OnEntry方法。