1

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

Spring 的初始化是使用从此处获取的提示以及使用此处找到的 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 的初始化方式。

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

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

4

1 回答 1

1

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

        container.Register(
                Component.For(typeof(ISessionFactoryKeyProvider))
                    .ImplementedBy(typeof(DefaultSessionFactoryKeyProvider))
                    .Named("sessionFactoryKeyProvider"));
于 2011-06-13T08:46:31.583 回答