annotate Source/Aspects/CacheAttribute.cs @ 6:11b6da379593

Исправлена странная ошибка при использовании OfType<...>().Where(...)
author cin
date Mon, 05 Dec 2016 05:50:52 +0300
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using BLToolkit.Properties;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using BLToolkit.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using BLToolkit.TypeBuilder.Builders;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 namespace BLToolkit.Aspects
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 /// http://www.bltoolkit.net/Doc/Aspects/index.htm
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 [AttributeUsage(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 AttributeTargets.Class |
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 AttributeTargets.Interface |
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 AttributeTargets.Property |
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 AttributeTargets.Method,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 AllowMultiple=true)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 public class CacheAttribute : InterceptorAttribute
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 #region Constructors
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 public CacheAttribute()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 : this(typeof(CacheAspect), null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 public CacheAttribute(Type cacheAspectType, string configString)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 : base(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 cacheAspectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 InterceptType.BeforeCall | InterceptType.AfterCall,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 configString,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 TypeBuilderConsts.Priority.CacheAspect)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 if (!TypeHelper.IsSameOrParent(typeof(CacheAspect), cacheAspectType))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 throw new ArgumentException(Resources.CacheAttribute_ParentTypeConstraintViolated);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 public CacheAttribute(Type interceptorType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 : this(interceptorType, null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 public CacheAttribute(Type interceptorType, int maxCacheTime)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 : this(interceptorType, null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 MaxCacheTime = maxCacheTime;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 public CacheAttribute(Type interceptorType, bool isWeak)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 : this(interceptorType, null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 IsWeak = isWeak;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 public CacheAttribute(Type interceptorType, int maxCacheTime, bool isWeak)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 : this(interceptorType, null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 MaxCacheTime = maxCacheTime;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 IsWeak = isWeak;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 public CacheAttribute(string configString)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 : this(typeof(CacheAspect), configString)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 public CacheAttribute(int maxCacheTime)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 : this(typeof(CacheAspect), maxCacheTime)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 public CacheAttribute(bool isWeak)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 : this(typeof(CacheAspect), isWeak)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 public CacheAttribute(int maxCacheTime, bool isWeak)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 : this(typeof(CacheAspect), maxCacheTime, isWeak)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 #region Properties
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 private bool _hasMaxCacheTime;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 private int _maxCacheTime;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 public int MaxCacheTime
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 get { return _maxCacheTime; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 set { _maxCacheTime = value; _hasMaxCacheTime = true; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 public int MaxSeconds
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 get { return MaxCacheTime / 1000; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 set { MaxCacheTime = value * 1000; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 public int MaxMinutes
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 get { return MaxCacheTime / 60 / 1000; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 set { MaxCacheTime = value * 60 * 1000; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 private bool _hasIsWeak;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 private bool _isWeak;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 public bool IsWeak
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 get { return _isWeak; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 set { _isWeak = value; _hasIsWeak = true; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 public override string ConfigString
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 get
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 string s = base.ConfigString;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 if (_hasMaxCacheTime) s += ";MaxCacheTime=" + MaxCacheTime;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 if (_hasIsWeak) s += ";IsWeak=" + IsWeak;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 if (!string.IsNullOrEmpty(s) && s[0] == ';')
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 s = s.Substring(1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 return s;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 }