Spring.NET學習筆記19——整合NHibernate和ASP.NET MVC(基礎篇)

  ASP.NET MVC Framework是微軟官方提供的MVC模式編寫ASP.NET Web應用程序的一個框架。MVC(Model-View-Controller)用於表示一種軟件架構模式.它把軟件系統分爲三個基本部分:模型(Model),視圖(View)和控制器(Controller)。

  今天帶給大家的就是期待以久的ASP.NET MVCSpring.NETNHibernate的組合,視圖打造.NET版的SSH(Spring-Struts-Hibernate)。是不是聽到名字都很興奮?我認爲目前的ASP.NET MVC比Struts在某些功能上要好用的多,而且代碼量要少,這就是我一直熱衷於ASP.NET MVC的原因。

  我們接着昨天的例子學習。昨天我們成功測試了帶事務的業務層。接下來就是將業務層的對象注入到Controller中。我們先在Controller中寫好要注入的屬性。

 

 我們知道,對Controller依賴注入需要新建一個ControllerFactory。我們實現System.Web.Mvc.IControllerFactory接口即可。實際上就是替換現有的ControllerFactory,讓Spring.NET容器管理Controller。包含Spring.NET容器配置的Controller使用新建的ControllerFactory,沒有包含Spring.NET容器配置的Controller使用原有的DefaultControllerFactory

 

 

 

  在Global.asax.cs的Application_Start方法下增加一些代碼,註冊SpringControllerFactory類。

 

 

然後我們以HomeController爲例,增加一些方法。

 

 

 

  這裏的HomeController我們部署了非singleton模式。

 

  最後我們配置Web.config。我總結了一下,有兩個要注意的地方:

  1.需要在appSettings節點處配置SessionFactoryid
  2.需要配置httpModules,因爲這關係到SessionFactory的作用域,直接影響對象的“延遲加載”等一系列問題。實際上SessionFactory的開關有Spring.Data.NHibernate.LocalSessionFactoryObject來控制。實現原理是Spring.NET會在HttpApplication.BeginRequest的事件中註冊打開SessionScope的動作,並在HttpApplication.EndRequest的事件中註冊關閉SessionScope的動作。這就意味着SessionFactory完全由Spring.NET來管理,我們不需要使用using語句來強制關閉Session。

 

 

我們運行一下程序。

 

  我個人認爲Spring.NET在SessionFactory和事務控制上對Nhibernate支持的很好,減少了我們的代碼量和增加了擴增性,這就是爲什麼NhibernateSpring.NET能成爲一對很好組合的原因。  

 

  代碼下載

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章