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