将NHibernate从2.1升级到3.0时,CommonServiceLocator中缺少ISessionFactoryKeyProvider

将NHibernate从2.1升级到3.0时,CommonServiceLocator中缺少ISessionFactoryKeyProvider,nhibernate,model-view-controller,spring.net,sharp-architecture,Nhibernate,Model View Controller,Spring.net,Sharp Architecture,我有一个ASP.NETMVC应用程序,它使用Spring.NET1.2进行依赖注入,使用NHibernate2.1进行ORM。它一直在MVC3上运行,使用S#arp体系结构,版本稍作修改,我们一直在自己编译,我现在正努力摆脱这一点。(即,我将开始使用引用的SharpArch.dll,而不是纯源代码。) Spring的初始化是使用来自的提示以及找到的SpringServiceLocatorAdapter完成的。NH是使用SharpArch的NHibernateSession.Init初始化的,它提

我有一个ASP.NETMVC应用程序,它使用Spring.NET1.2进行依赖注入,使用NHibernate2.1进行ORM。它一直在MVC3上运行,使用S#arp体系结构,版本稍作修改,我们一直在自己编译,我现在正努力摆脱这一点。(即,我将开始使用引用的SharpArch.dll,而不是纯源代码。)

Spring的初始化是使用来自的提示以及找到的SpringServiceLocatorAdapter完成的。NH是使用SharpArch的NHibernateSession.Init初始化的,它提供了两个assemblyPath。映射是使用HBM XML文件完成的

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

现在我已经让软件运行得足够好了,Spring已经初始化,DI已经正确完成。但是,当存储库尝试使用其会话对象时,会出现以下错误

创建名为“”的对象时出错: 没有任何类型的服务 'SharpArch.NHibernate.ISessionFactoryKeyProvider' 明确的

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

希望有人能给我指出正确的方向。我的日子不好过,因为我不是开始安装系统的人,而且很难找到版本升级的破坏性更改列表


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

您需要向spring注册ISessionFactoryKeyProvider的实现,默认实现是DefaultSessionFactoryKeyProvider,在温莎,该语句如下所示:

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

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

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

谢谢,这很有效。我在Spring.xml中添加了一个对象,这就成功了。谢谢,这很有效。我在Spring.xml中添加了一个对象,这就成功了。