Mercurial > pub > bltoolkit
view Extensions/JointureAddOn/Mapping/LazyValueLoadInterceptor.cs @ 4:f757da6161a1
!bug 100 + 2h fixed gregression
author | cin |
---|---|
date | Sun, 24 Aug 2014 17:57:42 +0400 |
parents | f990fcb411a9 |
children |
line wrap: on
line source
using System; using Castle.DynamicProxy; using IInterceptor = Castle.DynamicProxy.IInterceptor; namespace BLToolkit.Mapping { public class LazyValueLoadInterceptor : IInterceptor { #region Fields private readonly IObjectMapper _mapper; private readonly Func<IMapper, object, Type, object> _lazyLoader; private bool _intercepted; #endregion public LazyValueLoadInterceptor(IObjectMapper mapper, Func<IMapper, object, Type, object> lazyLoader) { _mapper = mapper; _lazyLoader = lazyLoader; } public void Intercept(IInvocation invocation) { if (invocation.Method.Name.StartsWith("get_")) { string propertyName = invocation.Method.Name.Substring(4); foreach (IMapper map in _mapper.PropertiesMapping) { if (map.PropertyName == propertyName) { if (!_intercepted) { _intercepted = true; map.Setter(invocation.Proxy, _lazyLoader(map, invocation.Proxy, invocation.TargetType)); } break; } } } // let the original call go through first, so we can notify *after* invocation.Proceed(); } } }