| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- using System;
- using System.Reflection;
- using LinFu.DynamicProxy;
- using NHibernate.Engine;
- using NHibernate.Proxy.Poco;
- using NHibernate.Type;
- namespace NHibernate.ByteCode.LinFu
- {
- [Serializable]
- public class LazyInitializer : BasicLazyInitializer, global::LinFu.DynamicProxy.IInterceptor
- {
- private static readonly MethodInfo exceptionInternalPreserveStackTrace =
- typeof (Exception).GetMethod("InternalPreserveStackTrace", BindingFlags.Instance | BindingFlags.NonPublic);
- public LazyInitializer(string entityName, System.Type persistentClass, object id, MethodInfo getIdentifierMethod,
- MethodInfo setIdentifierMethod, IAbstractComponentType componentIdType,
- ISessionImplementor session)
- : base(entityName, persistentClass, id, getIdentifierMethod, setIdentifierMethod, componentIdType, session) {}
- #region Implementation of IInterceptor
- public object Intercept(InvocationInfo info)
- {
- object returnValue;
- try
- {
- returnValue = base.Invoke(info.TargetMethod, info.Arguments, info.Target);
- // Avoid invoking the actual implementation, if possible
- if (returnValue != InvokeImplementation)
- {
- return returnValue;
- }
- returnValue = info.TargetMethod.Invoke(GetImplementation(), info.Arguments);
- }
- catch (TargetInvocationException ex)
- {
- exceptionInternalPreserveStackTrace.Invoke(ex.InnerException, new Object[] {});
- throw ex.InnerException;
- }
- return returnValue;
- }
- #endregion
- }
- }
|