1. 程式人生 > >Spring.net介紹及MVC中應用

Spring.net介紹及MVC中應用

text name default 轉變 業務層 核心 解耦 inf star

Spring.net兩大核心內容:

  • IOC(控制反轉)

傳統的面相對象思維模式是對象A依賴對象B,對象B的實例化和調用都在對象A中發生,一旦對象B中發生變化,對象A也要隨之變化,這樣使得程序間行程了緊密的耦合度

技術分享

IOC是一種編程思想,其理念就是借助於第三方來實現解耦。IOC核心是一個IOC容器,所有對象的控制權全部交給IOC容器,由IOC容器負責創建對象。模式由原來的創建對象--使用對象到被動接收IOC容器創建對象--使用對象,此期間對對象的控制權反生了轉變,因此被稱為控制反轉

技術分享

  • DI(依賴註入)

DI是實現控制反轉的一種編程方式,簡單來說就是在A對象中需要使用到B對象,則在A對象中必要new B( ),但是假設B對象發生變化,實例化時傳入參數發生變化,這時候 就需要修改A的代碼。

解決的辦法很簡單,就是將B作為對象傳入,A對象內直接接收 this.b = B ;

介紹完原理來看一看使用方法:

1. 下載Spring.net包 下載地址:http://www.springframework.net/download.html

2. 解壓並拷貝 \Spring.NET-1.3.1\bin\net\4.0\release 目錄下

Common.Logging.dll
Spring.Core.dll
Spring.Web.dll
Spring.Web.Extensions.dll
Spring.Web.Mvc.dll

的拓展文件到項目lib目錄下,並在Web項目中添加引用

3. 在項目下添加Config目錄,創建 controllers.xml

技術分享

在controllers.xml 中註冊控制器類

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">

  <object type="MyProject.Controllers.UserInfoController, MyProject" singleton="false" >
    <property name="userInfoService" ref
="UserInfoService" /> </object> <!--intentionally do NOT register the AccountController with the container; demonstrates that the underlying default controller factory will properly (attempt to!) resolve all controllers not registered with Spring.NET using its default controller resolution behavoir--> <!--<object type="Spring.MvcQuickStart.Controllers.AccountController, Spring.MvcQuickStart" singleton="false" />--> </objects>

object節點用於註冊控制器,

type屬性下以此聲明 命名空間+類名 , 程序集,

property屬性用於聲明控制器類中的屬性,如果是引用類型需要用ref指向其Service.xml下註冊對象類的name屬性

4. 在Config目錄下創建一個Service.xml

技術分享

在此xml文件下註冊BLL層中各個類

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
  <object type="MyProject.BLL.UserInfoService, MyProject.BLL" singleton="false" name="UserInfoService" >

  </object>
</objects>

5.在Web.config文件下註冊以下信息

在<configSections><configSections>節點下添加

    <sectionGroup name="spring">
      <!--spring.Net的配置-->
      <section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc"/>
    </sectionGroup>

在根節點<configuration></configuration>節點下添加

  <spring>
    <!--spring.Net配置-->
    <context>
    <!--修改成相應的目錄-->
      <resource uri="file://~/Config/controllers.xml"/>
      <resource uri="file://~/Config/Service.xml"/>
    </context>
  </spring>

6.最後別忘了修改Golbal.asax入口文件

    public class MvcApplication : SpringMvcApplication //System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }

至此就已經完成了業務層與邏輯層的解耦

在Controller控制器下僅需要聲明屬性,程序運行時便會自動傳入相應的對象

private IUserInfoService userInfoService { get; set;}

Spring.net介紹及MVC中應用