1

我有一个ASP.NET MVC应用程序,它使用Spring.NET 1.2进行依赖注入,并使用NHibernate 2.1进行ORM。它一直在MVC 3上运行,使用S#arp Architecture进行稍微修改的版本,我们一直在编译自己,这是我现在正努力摆脱的。 (即我将开始使用引用SharpArch .DLL文件的纯源代码来代替。)当将NHibernate从2.1升级到3.0时,CommonessionLocator中缺少ISessionFactoryKeyProvider

春天的初始化利用here采取提示完成,以及使用SpringServiceLocatorAdapter发现here。 NH使用SharpArch的NHibernateSession.Init进行初始化,它给出了我们的两个程序集路径。该映射是使用HBM XML文件完成的。

决定迁移到NH3导致DLL地狱的严重情况,因此我当然不得不更新FluentNH,NH Validator,SharpArch,Spring和Castle Windsor二进制文件。为了让事情发挥作用,需要大量的手工劳动,改变参考文献并做少量代码修复。这完全是预料之中的。

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

错误名为“创建对象”: 没有类型的服务 “SharpArch.NHibernate.ISessionFactoryKeyProvider” 定义

我一直在试图找出其原因为最佳现在的一部分。 在我看来,SpringServiceLocatorAdapter似乎已经过时,但我无法找到有关该信息的信息。此外,仅仅删除它的使用会导致存储库的会话为空,从而导致NullReferenceExceptions。但据我所知,问题可能与NH初始化的方式一样。

希望有人能指出我正确的方向。由于我不是开始设置系统的人,所以我很困难,而且版本升级的重大更改清单很难找到。

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

回答

1

你需要带弹簧注册ISessionFactoryKeyProvider的implmentation,默认的实现是DefaultSessionFactoryKeyProvider,在温莎的说法是这样的:

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

谢谢你,这个工作。我在我的Spring.xml中添加了一个对象,并且这样做。 – 2011-06-13 09:30:21