Spring.NET学习笔记19——整合NHibernate和ASP.NET MVC(基础篇) Level 300

  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中写好要注入的属性。

HomeController

 

  我们知道,对Controller依赖注入需要新建一个ControllerFactory。我们实现System.Web.Mvc.IControllerFactory接口即可。实际上就是替换现有的ControllerFactory,让Spring.NET容器管理Controller。包含Spring.NET容器配置的Controller使用新建的ControllerFactory,没有包含Spring.NET容器配置的Controller使用原有的DefaultControllerFactory

  

SpringControllerFactory

 

  在Global.asax.cs的Application_Start方法下增加一些代码,注册SpringControllerFactory类。

 

Global.asax.cs


 

  然后我们以HomeController为例,增加一些方法。

 

HomeController

 

 

Controllers.xml

 

  这里的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。

  

 

Web.config

 

   我们运行一下程序。

 

  我个人认为Spring.NET在SessionFactory和事务控制上对Nhibernate支持的很好,减少了我们的代码量和增加了扩增性,这就是为什么NhibernateSpring.NET能成为一对很好组合的原因。  

 

  代码下载

 

  返回目录

posted @   冬子哥  阅读(17182)  评论(44编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示