Mercurial > pub > bltoolkit
comparison Extensions/JointureAddOn/Mapping/LazyValueLoadInterceptor.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:f990fcb411a9 |
---|---|
1 using System; | |
2 using Castle.DynamicProxy; | |
3 using IInterceptor = Castle.DynamicProxy.IInterceptor; | |
4 | |
5 namespace BLToolkit.Mapping | |
6 { | |
7 public class LazyValueLoadInterceptor : IInterceptor | |
8 { | |
9 #region Fields | |
10 | |
11 private readonly IObjectMapper _mapper; | |
12 private readonly Func<IMapper, object, Type, object> _lazyLoader; | |
13 private bool _intercepted; | |
14 | |
15 #endregion | |
16 | |
17 public LazyValueLoadInterceptor(IObjectMapper mapper, Func<IMapper, object, Type, object> lazyLoader) | |
18 { | |
19 _mapper = mapper; | |
20 _lazyLoader = lazyLoader; | |
21 } | |
22 | |
23 public void Intercept(IInvocation invocation) | |
24 { | |
25 if (invocation.Method.Name.StartsWith("get_")) | |
26 { | |
27 string propertyName = invocation.Method.Name.Substring(4); | |
28 | |
29 foreach (IMapper map in _mapper.PropertiesMapping) | |
30 { | |
31 if (map.PropertyName == propertyName) | |
32 { | |
33 if (!_intercepted) | |
34 { | |
35 _intercepted = true; | |
36 map.Setter(invocation.Proxy, _lazyLoader(map, invocation.Proxy, invocation.TargetType)); | |
37 } | |
38 break; | |
39 } | |
40 } | |
41 } | |
42 | |
43 // let the original call go through first, so we can notify *after* | |
44 invocation.Proceed(); | |
45 } | |
46 } | |
47 } |