目前我正在尝试开发一个解决方案来检查一个方法是否已被执行,以及自上次执行以来是否已经过了一段时间,鉴于它已经过去并且时间已过,我想跳过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;
}
}
我怎样才能做到这一点?感谢。
答案 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方法。