0
This question was already asked here on SO但答案指的是NHibernate 3.2.0。有沒有反編譯NHibernate 4.0生成的動態代理類的方法?
那麼,有沒有一種方法來反編譯NHibernate 4.0生成的動態代理類?
This question was already asked here on SO但答案指的是NHibernate 3.2.0。有沒有反編譯NHibernate 4.0生成的動態代理類的方法?
那麼,有沒有一種方法來反編譯NHibernate 4.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");
}
}
我得到了一個異常:「無法轉換類型‘System.Reflection.Emit.InternalAssemblyBuilder’爲類型「的對象System.Reflection.Emit .AssemblyBuilder' –
嗯,它在我爲此編寫的一個快速測試程序中工作,但當我再次寫入時不再工作,我將調查我什麼時候有空。 – Firo