我创建了一个简单的裸网站,NHibernate 在中等信任下运行,尽管我所做的所有研究都说它应该可以工作,但我无法让最简单的示例工作。这是我的步骤
- 在面向 .Net 4.0 的 VS2012 中创建新网站。
- 通过 NuGet 添加 FluentNHibernate。还要添加 NHibernate.DependencyInjection 包。还安装 NHibernate 3.3.3。
- 将 web.config 配置为在中等信任下运行。
- 创建简单的会话工厂。连接到 MSSQL 数据库。利用
CurrentSessionContext(typeof(ManagedWebSessionContext).FullName)
此时,大家似乎都建议在 Application_Start 中你所要做的就是调用
NHibernate.DependencyInjection.Initializer.RegisterBytecodeProvider();
但是当我这样做时,我会感到害怕System.Security.Permissions.ReflectionPermission
。查看 DependencyInjection 的来源,它表明应该授予 ReflectionPermission 以使注入的东西起作用。但是 Medium Trust 明确禁止 ReflectionPermission。如果我只是跳过 DependencyInjection 的东西并尝试按原样使用 NHibernate(有些人似乎认为这可能会起作用),那么我仍然会得到相同的 SecurityExceptions。
所以你看到了我所在的 catch-22。听起来我需要使用 DependencyInjection 来让 Medium Trust 工作,但 DependencyInjection 需要 Medium Trust 不提供的权限。