1
1
using System ;
2
- using System . Collections . Concurrent ;
3
- using System . Linq . Expressions ;
4
2
using NHibernate . Engine ;
5
3
using NHibernate . Intercept ;
6
4
using NHibernate . Proxy . DynamicProxy ;
@@ -9,20 +7,20 @@ namespace NHibernate.Proxy
9
7
{
10
8
public class DefaultProxyFactory : AbstractProxyFactory
11
9
{
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 ( ) ;
15
11
protected static readonly INHibernateLogger log = NHibernateLogger . For ( typeof ( DefaultProxyFactory ) ) ;
16
12
17
13
public override INHibernateProxy GetProxy ( object id , ISessionImplementor session )
18
14
{
19
15
try
20
16
{
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 ;
26
24
}
27
25
catch ( Exception ex )
28
26
{
@@ -31,21 +29,10 @@ public override INHibernateProxy GetProxy(object id, ISessionImplementor session
31
29
}
32
30
}
33
31
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
-
44
32
public override object GetFieldInterceptionProxy ( object instanceToWrap )
45
33
{
46
- var factory = new ProxyFactory ( ) ;
47
34
var interceptor = new DefaultDynamicLazyFieldInterceptor ( ) ;
48
35
return factory . CreateProxy ( PersistentClass , interceptor , new [ ] { typeof ( IFieldInterceptorAccessor ) } ) ;
49
36
}
50
37
}
51
- }
38
+ }
0 commit comments