Spring.net介紹及MVC中應用
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中應用