2015-10-19 25 views

回答

0

使用自定義的Proxyfactory應該有所斬斷。使用FluentNHibernate

var config = Fluently.Configure() 
    .ProxyFactoryFactory<MyProxyFactoryFactory>() 

實施例的配置,它使用的類

class MyProxyFactoryFactory : DefaultProxyFactoryFactory, IProxyFactoryFactory 
{ 
    IProxyFactory IProxyFactoryFactory.BuildProxyFactory() 
    { 
     return new MyProxyFactory(); 
    } 
} 

class MyProxyFactory : AbstractProxyFactory, IProxyAssemblyBuilder 
{ 
    const string PathToSave = "D:/"; 

    private readonly ProxyFactory factory; 

    public MyProxyFactory() 
    { 
     factory = new ProxyFactory(this); 
    } 

    public override INHibernateProxy GetProxy(object id, ISessionImplementor session) 
    { 
     try 
     { 
      var initializer = new DefaultLazyInitializer(EntityName, PersistentClass, id, GetIdentifierMethod, SetIdentifierMethod, ComponentIdType, session); 

      object proxyInstance = IsClassProxy 
            ? factory.CreateProxy(PersistentClass, initializer, Interfaces) 
            : factory.CreateProxy(Interfaces[0], initializer, Interfaces); 

      return (INHibernateProxy)proxyInstance; 
     } 
     catch (Exception ex) 
     { 
      throw new HibernateException("Creating a proxy instance failed", ex); 
     } 
    } 

    public override object GetFieldInterceptionProxy(object instanceToWrap) 
    { 
     var interceptor = new DefaultDynamicLazyFieldInterceptor(); 
     return factory.CreateProxy(PersistentClass, interceptor, new[] { typeof(IFieldInterceptorAccessor) }); 
    } 

    public AssemblyBuilder DefineDynamicAssembly(AppDomain appDomain, AssemblyName name) 
    { 
     return appDomain.DefineDynamicAssembly(name, AssemblyBuilderAccess.RunAndSave, PathToSave); 
    } 

    public ModuleBuilder DefineDynamicModule(AssemblyBuilder assemblyBuilder, string moduleName) 
    { 
     return assemblyBuilder.DefineDynamicModule(moduleName, moduleName + ".mod", true); 
    } 

    public void Save(AssemblyBuilder assemblyBuilder) 
    { 
     assemblyBuilder.Save("generatedAssembly.dll"); 
    } 
} 
+0

我得到了一個異常:「無法轉換類型‘System.Reflection.Emit.InternalAssemblyBuilder’爲類型「的對象System.Reflection.Emit .AssemblyBuilder' –

+0

嗯,它在我爲此編寫的一個快速測試程序中工作,但當我再次寫入時不再工作,我將調查我什麼時候有空。 – Firo

相關問題