【问题标题】:ISessionFactoryKeyProvider missing from CommonServiceLocator when upgrading NHibernate from 2.1 to 3.0将 NHibernate 从 2.1 升级到 3.0 时,CommonServiceLocator 中缺少 ISessionFactoryKeyProvider
【发布时间】:2011-09-12 11:42:27
【问题描述】:

我有一个 ASP.NET MVC 应用程序,它使用 Spring.NET 1.2 进行依赖注入,使用 NHibernate 2.1 进行 ORM。它一直在 MVC 3 上运行,使用 S#arp 架构在一个我们自己编译的稍微修改过的版本中,我现在正在努力摆脱它。 (即,我将开始使用引用的 SharpArch .dll,而不是纯源代码。)

Spring 的初始化是使用来自 here 的提示以及使用 here 找到的 SpringServiceLocatorAdapter 完成的。 NH 使用 SharpArch 的 NHibernateSession.Init 进行初始化,它给定了我们的两个组装路径。映射是使用 HBM XML 文件完成的。

迁移到 NH 3 的决定导致了严重的 DLL Hell 案例,因此我当然不得不更新 FluentNH、NH Validator、SharpArch、Spring 和 Castle Windsor 二进制文件。为了让事情顺利进行,需要大量的体力劳动,更改引用并进行较小的代码修复。这一切都在意料之中。

现在我的软件运行良好,Spring 已初始化并且 DI 已正确完成。但是当存储库尝试使用它的 Session 对象时,我收到以下错误。

创建名称为 '' 的对象时出错: 没有服务类型 'SharpArch.NHibernate.ISessionFactoryKeyProvider' 定义

我一天中大部分时间都在试图找出造成这种情况的原因。 在我看来,SpringServiceLocatorAdapter 似乎已过时,但我找不到有关此的信息。此外,简单地删除它的使用会导致存储库的 Sessions 为 null,从而导致 NullReferenceExceptions。但据我所知,问题也可能是 NH 的初始化方式。

希望有人能指出我正确的方向。我很难过,因为我不是一开始就设置系统的人,而且很难找到版本升级的重大更改列表。

非常感谢!如果需要,我当然会提供更多信息。

【问题讨论】:

    标签: nhibernate model-view-controller spring.net sharp-architecture


    【解决方案1】:

    你需要在spring中注册一个ISessionFactoryKeyProvider的实现,默认实现是DefaultSessionFactoryKeyProvider,在windsor中,语句如下:

            container.Register(
                    Component.For(typeof(ISessionFactoryKeyProvider))
                        .ImplementedBy(typeof(DefaultSessionFactoryKeyProvider))
                        .Named("sessionFactoryKeyProvider"));
    

    【讨论】:

    • 谢谢,这成功了。我在我的 Spring.xml 中添加了一个对象 并且成功了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    相关资源
    最近更新 更多