我的代理生成器在为内部映射的 Nhibernate 类生成代理时遇到问题。我尝试在 assemblyinfo.cs 中使用 InternalsVisibleTo 将它们添加为可见,但它似乎不起作用。更糟糕的是,我不知道如何判断我是否已经成功地与我想要的代理程序集成为 friend ,因为如果我在 assemblyinfo.cs 中更改代理程序集公钥中的一些数字,就不会抛出任何错误。
错误:
测试方法 TestProject1.UnitTest1.TestMethod1 抛出异常: NHibernate.HibernateException:创建代理实例失败 ---> CaSTLe.DynamicProxy.Generators.GeneratorException:类型不公开,因此无法生成代理。类型:BaseSystemCore.Domain.Lot
堆栈跟踪:
CaSTLe.DynamicProxy.DefaultProxyBuilder.AssertValidType(类型目标) CaSTLe.DynamicProxy.DefaultProxyBuilder.CreateClassProxy(类型 classToProxy,类型 [] additionalInterfacesToProxy,ProxyGenerationOptions 选项) CaSTLe.DynamicProxy.ProxyGenerator.CreateClassProxy(类型 classToProxy,类型 [] additionalInterfacesToProxy,ProxyGenerationOptions 选项,Object [] constructorArguments,IInterceptor [] 拦截器) NHibernate.ByteCode.CaSTLe.ProxyFactory.GetProxy(对象 ID,ISessionImplementor session ) C:\Users\Isaac.G\Desktop\svn.bolinger.ca\Library Projects\NHibernateUtilities\NHibernateUtilities\BaseUnitOfWork.cs 中的 NHibernateUtilities.BaseUnitOfWork.handleException(异常 e):第 871 行 C:\Users\Isaac.G\Desktop\svn.bolinger.ca\Library Projects\NHibernateUtilities\NHibernateUtilities\BaseUnitOfWork.cs 中的 NHibernateUtilities.BaseUnitOfWork.getAllT:第 115 行 C:\Users\Isaac.G\Desktop\svn.bolinger.ca\Library Projects\BaseSystemCore\TestProject1\UnitTest1.cs 中的 TestProject1.UnitTest1.TestMethod1():第 71 行
有没有人曾经让这个工作过?
谢谢
艾萨克
最佳答案
NHibernate 3.2 内置了代理提供程序。我简要地查看了来源,它们似乎使用了这种格式:{0}ProxyAssembly.其中 {0} 是惰性映射类的类型名称。我还没有测试过。尝试将以下内容添加到您的 AssemblyInfo.cs 并将 {0} 替换为您的惰性类名称:
[assembly: InternalsVisibleTo("{0}ProxyAssembly")]
如果你仍然想使用旧版本的 NHibernate,你可以尝试使用这个(对于城堡字节代码提供者):
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
DynamicProxyGenAssembly2 是一个由 CaSTLe 动态生成的临时程序集。它包含派生自映射类(代理)的类。
关于c# - Nhibernate 映射的内部类和 InternalsVisibleTo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7151730/