• ASP.NET MVC Spring.NET 整合


    请注明转载地址: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项目,一个类库项目。如图所示:wps_clip_image-15351

    这里我们使用的是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.configwps_clip_image-20682

    其中红色圈中的部分,是对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);
    
            }
    
        }


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

    wps_clip_image-15418

    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文件,需要把他设置为“潜入的资源”。否则无法读取。

    wps_clip_image-28640

        然后更改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)

    运行一下:

    wps_clip_image-22529

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

    源码下载

  • 相关阅读:
    JVM 内部运行线程介绍
    JAVA多线程创建与退出过程
    各种 Java Thread State【转载】
    从Tomcat无法正常关闭讲讲Java线程关闭问题【转载】
    Class.forName和ClassLoader.loadClass的比较【转载】
    .NET Core、DNX、DNU、DNVM、MVC6学习资料
    Redis 资源
    Mongodb 资源
    部署Redis for Windows服务
    Mongodb副本集搭建经验
  • 原文地址:https://www.cnblogs.com/arhat/p/3540981.html
Copyright © 2020-2023  润新知