11using System ;
2- using System . Collections . Concurrent ;
3- using System . Linq . Expressions ;
42using NHibernate . Engine ;
53using NHibernate . Intercept ;
64using NHibernate . Proxy . DynamicProxy ;
@@ -9,20 +7,20 @@ namespace NHibernate.Proxy
97{
108 public class DefaultProxyFactory : AbstractProxyFactory
119 {
12- static readonly ConcurrentDictionary < ProxyCacheEntry , Func < ILazyInitializer , NHibernateProxyFactoryInfo , INHibernateProxy > > Cache =
13- new ConcurrentDictionary < ProxyCacheEntry , Func < ILazyInitializer , NHibernateProxyFactoryInfo , INHibernateProxy > > ( ) ;
14-
10+ private readonly ProxyFactory factory = new ProxyFactory ( ) ;
1511 protected static readonly INHibernateLogger log = NHibernateLogger . For ( typeof ( DefaultProxyFactory ) ) ;
1612
1713 public override INHibernateProxy GetProxy ( object id , ISessionImplementor session )
1814 {
1915 try
2016 {
21- var cacheEntry = new ProxyCacheEntry ( IsClassProxy ? PersistentClass : typeof ( object ) , Interfaces ) ;
22- var proxyActivator = Cache . GetOrAdd ( cacheEntry , pke => CreateProxyActivator ( pke ) ) ;
23- return proxyActivator (
24- new LiteLazyInitializer ( EntityName , id , session , PersistentClass ) ,
25- new NHibernateProxyFactoryInfo ( EntityName , PersistentClass , Interfaces , GetIdentifierMethod , SetIdentifierMethod , ComponentIdType ) ) ;
17+ var initializer = new DefaultLazyInitializer ( EntityName , PersistentClass , id , GetIdentifierMethod , SetIdentifierMethod , ComponentIdType , session , OverridesEquals ) ;
18+
19+ object proxyInstance = IsClassProxy
20+ ? factory . CreateProxy ( PersistentClass , initializer , Interfaces )
21+ : factory . CreateProxy ( Interfaces [ 0 ] , initializer , Interfaces ) ;
22+
23+ return ( INHibernateProxy ) proxyInstance ;
2624 }
2725 catch ( Exception ex )
2826 {
@@ -31,21 +29,10 @@ public override INHibernateProxy GetProxy(object id, ISessionImplementor session
3129 }
3230 }
3331
34- Func < ILazyInitializer , NHibernateProxyFactoryInfo , INHibernateProxy > CreateProxyActivator ( ProxyCacheEntry pke )
35- {
36- var proxyBuilder = new NHibernateProxyBuilder ( GetIdentifierMethod , SetIdentifierMethod , ComponentIdType , OverridesEquals ) ;
37- var type = proxyBuilder . CreateProxyType ( pke . BaseType , pke . Interfaces ) ;
38- var ctor = type . GetConstructor ( new [ ] { typeof ( ILazyInitializer ) , typeof ( NHibernateProxyFactoryInfo ) } ) ;
39- var li = Expression . Parameter ( typeof ( ILazyInitializer ) ) ;
40- var pf = Expression . Parameter ( typeof ( NHibernateProxyFactoryInfo ) ) ;
41- return Expression . Lambda < Func < ILazyInitializer , NHibernateProxyFactoryInfo , INHibernateProxy > > ( Expression . New ( ctor , li , pf ) , li , pf ) . Compile ( ) ;
42- }
43-
4432 public override object GetFieldInterceptionProxy ( object instanceToWrap )
4533 {
46- var factory = new ProxyFactory ( ) ;
4734 var interceptor = new DefaultDynamicLazyFieldInterceptor ( ) ;
4835 return factory . CreateProxy ( PersistentClass , interceptor , new [ ] { typeof ( IFieldInterceptorAccessor ) } ) ;
4936 }
5037 }
51- }
38+ }
0 commit comments