请注明转载地址:http://www.cnblogs.com/arhat

在整合这三个技术之前,首先得说明一下整合的步骤,俗话说汗要一口一口吃,事要一件一件做。同理这个三个技术也是。那么在整合之前,需要对
ASP.NET,Spring.NET,NHibernate有所了解,最好是有一些经验,因为平白无故的就把3个技术融合到一起,会闹些小别扭,其实就像配置化学药品一样,如果3中原料有一点出路,那么整个实验也就失败了。

在网上有很多高人都写过类似的文章,可能是鄙人不才,看了很多文章都没有把我的问题解决了,同时我在整合的过程中走了不少的弯路。今天做一下记录,防止自己忘掉。好了,言归正传。

整合原理:

我们在初中,高中都学过化学,知道有些物质是不能很好的反应,需要通过催化剂来促使两者之间更改好的反应。那么我们就把ASP.NET MVC看成是物质A,NHibernate看成是物质C。本身A+C=应用。但是由于A和C之间结合会带来开发上的一些难题(比如事务的控制),那么怎么办呢,我们可以加入催化剂Spring.NET(物质B)。这样通过B这个催化剂很好的解决了A+C之间的问题。于是公式就出来了A+B+C=应用。

当然,我们这里是程序设计而不是化学反应,所以在结合的过程中我们遵循下面的步骤。

1. ASP.NET + Spring.NET

2. ASP.NET + NHibernate

3. ASP.NET +Spring.NET +NHibernate

一、ASP.Net MVC与Spring.NET整合
首先我们建立一个空的解决方案“MVCSpring”。在解决方案中加入两个项目,一个Web项目,一个类库项目。如图所示:

这里我们使用的是Spring.Net 1.3.2,因为它支持ASP.NET MVC3,如果要使用ASP.NET MVC4的话,那么可以使用Spring.NET 2.0。

1. 在Web项目中,我们加入:
    Spring.Core.dll,Spring.Data.dll,Spring.Web.Mvc3.dll的引用。

2. 配置Web.config

其中红色圈中的部分,是对Spring.NET的设置,让应用程序启动的时候就启用Spring.NET。需要注意的地方是对于Context的设置是是Spring.Web.Mvc3程序集中提供的Spring.Context.Support.MvcContextHandler。

然后在<spring>节点中提供了Context的资源<resource uri=""/> ,暂时先为空,稍后我们补充其资源。

代码:

<configSections>

        <sectionGroup name="spring">

            <section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc3"/>

        </sectionGroup>

    </configSections>

    <spring>

        <context>

            <resource uri=""/>      

            <resource uri=""/>

        </context>

    </spring>

3. 创建Controller和视图

在Controllers文件中创建一个HomeController.cs。代码如下:

public class HomeController : Controller

  {

    public string Name { get; set; }

    public ActionResult Index()

            {

                   ViewBag.Name = this.Name;

        return View();

            }

}

视图文件代码:

<!DOCTYPE html>

<html>

<head>

<title>Index</title>

</head>

<body>

<div>

        Hello Spring MVC @ViewBag.Name

</div>

</body>

</html>

4. 配置文件
    在Web项目中添加一个文件夹Config,并在其中创建一个Controllers.xml文件。

内容如下:

<objects xmlns="http://www.springframework.net">

<object type="Com.Symjie.Web.Controllers.HomeController,Com.Symjie.Web" singleton="false">

        <property name="Name" value="济公罗汉"></property>

</object>

</objects>

这个文件还用来配置Contoller的,配置的原因是让Spring.NET来管理Controller而不是让ASP.NET MVC来管理,更重要的原因是要使用Spring.NET的IoC机制。注意,在这里一定要把Controller设置为singleton="false",因为Controller不是单态的。

5. 更改Web.config文件,配置资源文件

<spring>

        <context>

           <resource uri="file://~/Config/Controllers.xml"/>    

           <resource uri=""/>

        </context>

    </spring>

6. 更改Global.asax文件,让Spring.NET来管理Controller。

默认情况下,Global.asax中MvcApplication是继承于HttpApplication。那么如果要让Spring.NET来管理那么需要让MvcApplication继承与Spring提供的类:Spring.Web.Mvc.SpringMvcApplication。更改后代码如下:

public class MvcApplication : Spring.Web.Mvc.SpringMvcApplication//System.Web.HttpApplication

    {

        public void RegisterGlobalFilters(GlobalFilterCollection filters)

        {

            filters.Add(new HandleErrorAttribute());

        }

        public void RegisterRoutes(RouteCollection routes)

        {

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(

                          "Default", // 路由名称

                          "{controller}/{action}/{id}", // 带有参数的 URL

                          new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值

            );

        }

        protected void Application_Start()

        {

            AreaRegistration.RegisterAllAreas();

            RegisterGlobalFilters(GlobalFilters.Filters);

            RegisterRoutes(RouteTable.Routes);

        }

    }

好了,到此呢我们就可以预览一下效果了。

7. 加强Spring.NET练习

    在上面的几步中,我们学会了如何把ASP.NET MVC 和Spring.NET结合起来了,但是在Controllers.xml中,我们只是在HomeController中注入了一个普通的属性,那么如果要注入Com.Symjie.Model中的实体类该怎么办呢?那么这个练习就是用来说明如何做到的。

在Com.Symjie.Model中创建一个类Person。代码如下:

public class Person

   {

    public string Name { get; set; }

    public int Age { get; set; }

   }

在Com.Symjie.Model中创建一个Config文件夹,并创建Objects.xml文件, 代码如下:

<?xml version="1.0" encoding="utf-8" ?>

<objects xmlns="http://www.springframework.net">

    <object id="person" type="Com.Symjie.Model.Person,Com.Symjie.Model" singleton="false">

        <property name="Name" value="济公罗汉"></property>

        <property name="Age" value="182"></property>

    </object>

</objects>

注意,这个Objects.xml文件,需要把他设置为“潜入的资源”。否则无法读取。

然后更改Web.config文件,配置资源。代码如下:

<context>

            <resource uri="file://~/Config/Controllers.xml"/>

            <resource uri="assembly://Com.Symjie.Model/Com.Symjie.Model.Config/Objects.xml"/>

</context>

打开HomeController文件,更改内容如下:

public  Model.Person Person  { get; set; }

public ActionResult Index()

 {

            ViewBag.Person =this.Person;

    return View();

 }

打开视图,更改内容如下:

Hello Spring MVC 我是:@ViewBag.Person.Name,我的年龄是:@ViewBag.Person.Age

打开Controllers.xml文件,更改HomeController的注入属性,代码如下:

<objects xmlns="http://www.springframework.net">

    <object type="Com.Symjie.Web.Controllers.HomeController,Com.Symjie.Web" singleton="false">

        <property name="Person" ref="person"></property>

    </object>

</objects>

注意:ref="person",这里的person是Objects.xml文件中定义的对象名(id)

运行一下:

好了,这一章节到此结束,本章把ASP.NET MVC 和 Spring.NET只是一个简单的组合。下一章节,我们将讲解ASP.NET MVC 和 NHibernate的结合。

源码下载

ASP.NET MVC Spring.NET 整合的更多相关文章

  1. [转]ASP.NET MVC Spring.NET NHibernate 整合

    请注明转载地址:http://www.cnblogs.com/arhat 在整合这三个技术之前,首先得说明一下整合的步骤,俗话说汗要一口一口吃,事要一件一件做.同理这个三个技术也是.那么在整合之前,需 ...

  2. ASP.NET MVC Spring.NET NHibernate 整合

    请注明转载地址:http://www.cnblogs.com/arhat 在整合这三个技术之前,首先得说明一下整合的步骤,俗话说汗要一口一口吃,事要一件一件做.同理这个三个技术也是.那么在整合之前,需 ...

  3. SSM 即所谓的 Spring MVC + Spring + MyBatis 整合开发。

    SSM 即所谓的 Spring MVC + Spring + MyBatis 整合开发.是目前企业开发比较流行的架构.代替了之前的SSH(Struts + Spring + Hibernate) 计划 ...

  4. Spring MVC Spring MyBatis 整合 - 快速上手

    我个人比较喜欢写注释,在工作中对注释的重要性看的也比较高,所以大部分文字都在注释中,代码外的文字会写的偏少,关键能懂就行 先看一下整合后的工程目录(单工程,多工程以后会采用maven) 5个packa ...

  5. spring mvc ,spring boot 整合swagger

    https://blog.csdn.net/qq_35992900/article/details/81274436

  6. ASP.NET MVC NHibernate 整合

    请注明转载地址:http://www.cnblogs.com/arhat 在整合这三个技术之前,首先得说明一下整合的步骤,俗话说汗要一口一口吃,事要一件一件做.同理这个三个技术也是.那么在整合之前,需 ...

  7. Asp.net MVC + EF + Spring.Net 项目实践3

    Asp.net MVC + EF + Spring.Net 项目实践 这一篇要整合Model层和Repository层,提供一个统一的操作entity的接口层,代码下载地址(博客园上传不了10M以上的 ...

  8. Asp.net MVC + EF + Spring.Net 项目实践(目录)

    用4篇博客来搭一个MVC的框架,可能对初学者会有一些帮助,大家共勉吧.我觉得对于中小型项目,这个框架可能还是有一定的用处的,希望能够帮助到一些人. Asp.net MVC + EF + Spring. ...

  9. 25、ASP.NET MVC入门到精通——Spring.net-业务层仓储

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 上一节,我们已经把项目框架的雏形搭建好了,那么现在我来开始业务实现,在业务实现的过程当中,不断的来完善我们现有的框架. 1.假设我们来做一个 ...

随机推荐

  1. xss脚本攻击

    xss脚本攻击不仅仅只是alert(1)就算完了,xss脚本攻击真正的用处是盗取普通用户的cookie,或者盗取管理员的cookie. xss分类(类型): 1. 反射型xss2. 存储型xss3. ...

  2. iOS开发几年了,你清楚OC中的这些东西么1

    前言 几年前笔者是使用Objective-C进行iOS开发, 不过在两年前Apple发布swift的时候,就开始了swift的学习, 在swift1.2发布后就正式并且一直都使用了swift进行iOS ...

  3. 读写锁ReadWriteLock和缓存实例

    读写锁:多个读锁不互斥,读锁与写锁互斥,写锁与写锁互斥.即:读的时候不允许写,写的时候不允许读,可以同时读.      synchronized关键字和普通的Lock构造的锁,会造成读与读之间的互斥, ...

  4. 对setTimeout()第一个参数是字串的深入理解以及eval函数的理解

    <script language="javascript" type="text/javascript"> var a=1; setTimeout( ...

  5. JavaScript中的作用域与函数和变量声明的提升

      var foo = 1; function bar() {     if (!foo) {         var foo = 10;     }     alert(foo); } bar(); ...

  6. Leetcode 94. Binary Tree Inorder Traversal (中序遍历二叉树)

    Given a binary tree, return the inorder traversal of its nodes' values. For example: Given binary tr ...

  7. 【转】adb uninstall卸载apk文件说明

    昨天在使用adb卸载程序,结果死活卸载不了.我输入的命令和系统提示如下: [plain] view plaincopy   arthur@arthur-laptop:~$ adb uninstall  ...

  8. C#学习笔记5:数据类型与进制转换

    1.C#: 8种整形类型.2种用于科学计算的二进制浮点类型.1种用于金融计算的十进制浮点类型. 2.Decimal是一种特殊的浮点类型,能够存储大数字而无表示错误. 常用于货币计算.在表示的所有十进制 ...

  9. 在XP系统下搭建maven环境出的问题 Unable to locate the Javac Compiler in: C:\Program Files\Java\jre6\..\lib\tools.jar

    Build errors for spider; org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute g ...

  10. C# IO操作(三)文件编码

    在.net环境下新建一个文本文件(所谓文本文件就是直接可以用记事本打开的文件,直接保存字符串)和在系统中新建一个文本文件的编码是不一样的,.net默认采用UTF-8,而中文操作系统采用的是ANSI.如 ...