2014-04-09 2 views
2

현재 메서드가 실행되었는지 확인하고 마지막 실행 후 시간이 경과했는지 그리고 시간이 경과했는지 확인하는 솔루션을 개발하려고합니다. OnEntry 메서드를 건너 뛰고 싶습니다. 메서드 자체에서 코드를 실제로 실행하지 않고 OnExit에 전달합니다.PostSharp를 사용하여 메소드 실행을 중지하려면 어떻게해야합니까?

정렬 :

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

캐시의 인수로 인수를 사용하지 않으시겠습니까? – Aron

+0

isCached 메서드에서 수행해야 할 작업을 알고 있다고 가정합니다. – sweetfa

답변

4

다음 코드 수정은 원하는 것을 얻는 방법을 보여줍니다. 각 측면의 별도의 인스턴스가 생성됩니다 당신이 당신의 조언을 연결할 때

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으로 이동할 이유가 없으면 OnButton 및 반환 값 설정을 OnEntry 메서드에 추가하여 OnExit 메서드를 호출하면됩니다.