Mercurial > pub > bltoolkit
diff Tools/DocGen/Content/Doc/Aspects/CacheAspect.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Tools/DocGen/Content/Doc/Aspects/CacheAspect.cs Thu Mar 27 21:46:09 2014 +0400 @@ -0,0 +1,62 @@ +[BLToolkitGenerated] +public sealed class TestClass : HowTo.Aspects.TestClass +{ + private static CallMethodInfo _methodInfo; + private static IInterceptor _interceptor; + + 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; + } +}