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

时间:2014-04-09 17:11:39

标签: c# postsharp aop

目前我正在尝试开发一个解决方案来检查一个方法是否已被执行,以及自上次执行以来是否已经过了一段时间,鉴于它已经过去并且时间已过,我想跳过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;


             }
}

我怎样才能做到这一点?感谢。

1 个答案:

答案 0 :(得分: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;
        }
}

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

如果没有理由跳转到OnExit,那么只需在调用OnExit方法时将FlowBehaviour和返回值设置添加到OnEntry方法。