我有一个ASP.NET MVC应用程序,它使用Spring.NET 1.2进行依赖注入,使用NHibernate 2.1进行ORM。它一直在MVC 3上运行,在一个稍微修改过的版本中使用S#arp架构,我们一直在编译,我现在正在努力摆脱它。 (即我将开始使用引用的SharpArch .dll而不是纯源代码。)
使用从here获取的提示以及使用找到的here SpringServiceLocatorAdapter完成Spring的初始化。 NH使用SharpArch的NHibernateSession.Init初始化,它给出了我们的两个汇编路径。映射是使用HBM XML文件完成的。
转移到NH 3的决定引发了一个严重的DLL地狱案例,因此我当然不得不更新FluentNH,NH Validator,SharpArch,Spring和Castle Windsor二进制文件。为了使工作变得有效,需要更改引用并进行少量代码修复。这一切都是预期的。
现在我已经让软件运行良好,Spring已初始化并且DI正确完成。但是当存储库尝试使用它的Session对象时,我收到以下错误。
创建名为''的对象时出错: 没有类型的服务 'SharpArch.NHibernate.ISessionFactoryKeyProvider' 定义
我一直试图在一天中的最佳时刻找出原因。 在我看来,SpringServiceLocatorAdapter已经过时,但我找不到有关它的信息。此外,只需删除它的使用会导致存储库的Sessions为null,从而导致NullReferenceExceptions。但据我所知,这个问题也可能就像NH初始化一样。
希望有人可以指出我正确的方向。我很难过,因为我不是那个开始设置系统的人,很难找到版本升级的重大变化列表。
非常感谢!如果需要,我当然会提供更多信息。
答案 0 :(得分:1)
你需要用spring注册一个ISessionFactoryKeyProvider的实现,默认实现是DefaultSessionFactoryKeyProvider,在windsor中,语句看起来像这样:
container.Register(
Component.For(typeof(ISessionFactoryKeyProvider))
.ImplementedBy(typeof(DefaultSessionFactoryKeyProvider))
.Named("sessionFactoryKeyProvider"));