annotate Tools/DocGen/Content/Doc/Aspects/CacheAspect.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 [BLToolkitGenerated]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 public sealed class TestClass : HowTo.Aspects.TestClass
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 private static CallMethodInfo _methodInfo;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 private static IInterceptor _interceptor;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 public override int CachedMethod(int p1, int p2)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 int returnValue = 0;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 if (_methodInfo == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 _methodInfo = new CallMethodInfo((MethodInfo)MethodBase.GetCurrentMethod());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 InterceptCallInfo info = new InterceptCallInfo();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 info.Object = this;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 info.CallMethodInfo = _methodInfo;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 info.ParameterValues[0] = p1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 info.ParameterValues[1] = p2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 info.ReturnValue = returnValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 info.InterceptResult = InterceptResult.Continue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 info.InterceptType = InterceptType.BeforeCall;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 if (_interceptor == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 _interceptor = new CacheAspect();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 _interceptor.Init(_methodInfo, "MaxCacheTime=500;IsWeak=False");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 // 'BeforeCall' step checks if the method is cached.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 // If it is and the cache is not expired, the Intercept method populates
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 // return value and output parameters with the cached values and
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 // sets info.InterceptResult to InterceptResult.Return.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 // See the [link][file]Aspects/CacheAspect.cs[/file]CacheAspect.BeforeCall[/link] method for details.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 _interceptor.Intercept(info);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 returnValue = (int)info.ReturnValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 if (info.InterceptResult != InterceptResult.Return)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 // If the method call is not cached, target method is called.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 returnValue = base.CachedMethod(p1, p2);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 info.ReturnValue = returnValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 info.InterceptResult = InterceptResult.Continue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 info.InterceptType = InterceptType.AfterCall;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 // 'AfterCall' step stores parameters and return values in the cache.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 // See the [link][file]Aspects/CacheAspect.cs[/file]CacheAspect.AfterCall[/link] method for details.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 _interceptor.Intercept(info);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 returnValue = (int)info.ReturnValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 return returnValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 }