【问题标题】:NInject and NHibernate, sitting in a treeNInject 和 NHibernate,坐在树上
【发布时间】:2012-03-21 10:33:50
【问题描述】:

.. 但不是 k.i.s.s.i.n.g

我正在尝试将 NInject 与 NHibernate 一起使用。通过 NuGet 我正在使用

  • NHibernate v3.1.0.4000
  • NHibernate.Castle v3.1.0.4000
  • NHibernate.Linq v1.0
  • FluentNHibernate v1.2..0.712
  • NInject v2.2.1.4

当我尝试通过 NInject 解析一个类时,我收到以下错误:

无法加载文件或程序集“NHibernate,版本=2.1.2.4000,Culture=neutral,PublicKeyToken=aa95f207798dfdb4”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (HRESULT 异常:0x80131040)

我在 app.config 中有以下内容

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="NHibernate" publicKeyToken="aa95f207798dfdb4" />
    <bindingRedirect oldVersion="2.1.0.4000-2.1.2.4000" newVersion="3.1.0.4000" />
  </dependentAssembly>
</assemblyBinding>

我注意到下载的 NInject 包在 \packages\Ninject.2.2.1.4\lib 下包含以下内容

  • ..\net35-客户端
  • ..\net35-完整
  • ..\net40-客户端
  • ..\net40-完整

当我使用 NuGet 管理特定库的包时,包含了上述哪个版本?这是一个可以通过手动添加对正确 Ninject dll 的引用来解决的问题吗?

TIA

【问题讨论】:

  • 删除 NHibernate.Linq,您使用的是 NH3,它有自己的 LINQ 提供程序。
  • +1 用于在标题中使用坐在树上。
  • 谢谢菲尔。我已经删除了 NH.Linq 并在我的存储库类中用 session.Query 替换了我的 session.Linq 调用。但是,我们的存储库库扩展了 NHibernateContext。 NH3 中的 NHibernateContext 在哪里,或者它被什么取代了?

标签: nhibernate ninject


【解决方案1】:

NuGet 根据项目类型决定使用哪个版本。例如。如果您正在编写一个 .NET 客户端配置文件程序集,那么它将添加对 net40-Client 的引用

您可以手动引用任何您喜欢的程序集。但通常 NuGet 已经选择了正确的版本。

【讨论】:

    【解决方案2】:

    删除对 NH.Linq 的引用解决了 Phill 建议的问题

    【讨论】:

    • 抱歉回复晚了,很高兴它解决了您的问题。我不确定 NH 上下文,除了用户类型之外,我不需要在 NH3 上进行扩展。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多