public override int CachedMethod(int p1, int p2) { int returnValue = 0; if (_methodInfo == null) { _methodInfo = new CallMethodInfo((MethodInfo)MethodBase.GetCurrentMethod()); } InterceptCallInfo info = new InterceptCallInfo(); info.Object = this; info.CallMethodInfo = _methodInfo; info.ParameterValues[0] = p1; info.ParameterValues[1] = p2; info.ReturnValue = returnValue; info.InterceptResult = InterceptResult.Continue; info.InterceptType = InterceptType.BeforeCall; if (_interceptor == null) { _interceptor = new CacheAspect(); _interceptor.Init(_methodInfo, "MaxCacheTime=500;IsWeak=False"); } // 'BeforeCall' step checks if the method is cached. // If it is and the cache is not expired, the Intercept method populates // return value and output parameters with the cached values and // sets info.InterceptResult to InterceptResult.Return. // See the [link][file]Aspects/CacheAspect.cs[/file]CacheAspect.BeforeCall[/link] method for details. // _interceptor.Intercept(info); returnValue = (int)info.ReturnValue; if (info.InterceptResult != InterceptResult.Return) { // If the method call is not cached, target method is called. // returnValue = base.CachedMethod(p1, p2); info.ReturnValue = returnValue; info.InterceptResult = InterceptResult.Continue; info.InterceptType = InterceptType.AfterCall; // 'AfterCall' step stores parameters and return values in the cache. // See the [link][file]Aspects/CacheAspect.cs[/file]CacheAspect.AfterCall[/link] method for details. // _interceptor.Intercept(info); returnValue = (int)info.ReturnValue; } return returnValue; }
public override int CachedMethod(int p1, int p2) { int returnValue = 0; if (_methodInfo == null) { _methodInfo = new CallMethodInfo((MethodInfo)MethodBase.GetCurrentMethod()); } InterceptCallInfo info = new InterceptCallInfo(); info.Object = this; info.CallMethodInfo = _methodInfo; info.ParameterValues[0] = p1; info.ParameterValues[1] = p2; info.ReturnValue = returnValue; info.InterceptResult = InterceptResult.Continue; info.InterceptType = InterceptType.BeforeCall; if (_interceptor == null) { _interceptor = new CacheAspect(); _interceptor.Init(_methodInfo, "MaxCacheTime=500;IsWeak=False"); } // 'BeforeCall' step checks if the method is cached. // If it is and the cache is not expired, the Intercept method populates // return value and output parameters with the cached values and // sets info.InterceptResult to InterceptResult.Return. // See the [link][file]Aspects/CacheAspect.cs[/file]CacheAspect.BeforeCall[/link] method for details. // _interceptor.Intercept(info); returnValue = (int)info.ReturnValue; if (info.InterceptResult != InterceptResult.Return) { // If the method call is not cached, target method is called. // returnValue = base.CachedMethod(p1, p2); info.ReturnValue = returnValue; info.InterceptResult = InterceptResult.Continue; info.InterceptType = InterceptType.AfterCall; // 'AfterCall' step stores parameters and return values in the cache. // See the [link][file]Aspects/CacheAspect.cs[/file]CacheAspect.AfterCall[/link] method for details. // _interceptor.Intercept(info); returnValue = (int)info.ReturnValue; } return(returnValue); }
public override void TestMethod() { if (_methodInfo == null) { _methodInfo = new CallMethodInfo((MethodInfo)MethodBase.GetCurrentMethod()); } InterceptCallInfo info = new InterceptCallInfo(); try { info.Object = this; info.CallMethodInfo = _methodInfo; info.InterceptResult = InterceptResult.Continue; info.InterceptType = InterceptType.BeforeCall; if (_interceptor == null) { _interceptor = new CounterAspect(); _interceptor.Init(_methodInfo, null); } // 'BeforeCall' creates or gets a counter for the method and // registers the current call. // See the [link][file]Aspects/CounterAspect.cs[/file]CounterAspect.BeforeCall[/link] method for details. // _interceptor.Intercept(info); if (info.InterceptResult != InterceptResult.Return) { // Target method call. // base.TestMethod(); } } catch (Exception exception) { info.Exception = exception; info.InterceptResult = InterceptResult.Continue; info.InterceptType = InterceptType.OnCatch; // 'OnCatch' is required to count calls with exceptions. // _interceptor.Intercept(info); if (info.InterceptResult != InterceptResult.Return) { throw; } } finally { info.InterceptResult = InterceptResult.Continue; info.InterceptType = InterceptType.OnFinally; // 'OnFinally' step adds statistic to the method counter. // See the [link][file]Aspects/CounterAspect.cs[/file]CounterAspect.OnFinally[/link] method for details. // _interceptor.Intercept(info); } }