Spring.net與Asp.net Mvc結合示例《轉載》

1、介紹html

  由於項目要用到Ioc框架,因此要爲Ioc框架選型,優秀的Ioc框架好幾款,例如:sping.net,castle,unity……固然還不止三款,還有其它的Ioc框架,castle跟unity使用上比較相近,spring.net跟前二者使用上差別較大些。資料、文檔和博文方面spring.net>castle>unity。這三個都有大的強大的團隊支持,我感受spring.net作得最好,不管更新力度、文檔和示例都很給力。git

  鑑於spring.net的功能、資料文檔、博文等比較完善豐富,再加上本人對spring.net相對較熟悉一些,人員培訓等都較容易,所以選用了spring.net做爲項目的Ioc框架。程序員

二。Spring.net與Asp.net MvC結合的入門示例web

1)依賴組件spring

這裏須要用到Spring.net如下組件:編程

Common.Logging.dll微信

Spring.Core.dll架構

Spring.Web.Mvc.dllmvc

2)環境搭建框架

入門示例習慣都從Hello world開始,此次也不例外

首先,建立一個Asp.net mvc項目:

咱們在Model文件夾裏新建一個IHello接口和一個Hello實現類

IHello接口

public interface IHello

{

string SayHelloWorld();

}

Hello實現類

複製代碼
public class Hello : IHello

{

public string SayHelloWorld()

{

return "Hello World!";

}

}
複製代碼

在SayHelloWorld方法中return了一個字符串」Hello world!」。

讓咱們來測試它吧,在HomeController裏咱們寫下以下代碼:

HomeController類

複製代碼
public class HomeController : Controller

{

public IHello hello = new Hello();



public ActionResult Index()

{

ViewBag.Message = hello.SayHelloWorld();



return View();

}



public ActionResult About()

{

return View();

}

}
複製代碼

咱們實例化了一個Hello對象,硬編碼的方式,先運行一下看看效果:

上面運行一切正常,好了讓咱們來引入spring.net

3)引入spring組件

上面提到的spring.net的組件引入到工程裏面來:

 

4)修改web.config添加Spring配置:

 web.config

複製代碼
 <configSections>

<sectionGroup name="spring">

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

</sectionGroup>

</configSections>



<spring>

<context>

<resource uri="~/Configs/Spring.xml"/>

</context>

</spring>
複製代碼

咱們引用了另外的一個xml文件Spring.xml,用於配置對象和設置相關依賴。

5)移除掉具體的實現

在配置對象以前,咱們先把HomeController代碼改一改,移除掉具體的實現:

複製代碼
  public class HomeController : Controller

{

public IHello Hello { get; set; }



public ActionResult Index()

{

ViewBag.Message = this.Hello.SayHelloWorld();



return View();

}



public ActionResult About()

{

return View();

}

}
複製代碼

6)配置對象和設置相關依賴

Spring.xml

複製代碼
<?xml version="1.0" encoding="utf-8" ?>

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

<object id="Hello" type="SpringMvcApp.Models.Hello, SpringMvcApp"/>

<object type="SpringMvcApp.Controllers.HomeController, SpringMvcApp" singleton="false">

<property name="Hello" ref="Hello"/>

</object>

</objects>
複製代碼

這裏須要注意一點的是,對象默認配置是單例的,Controller不是單例的,因此這裏把singleton設置爲false。

是否這樣就已經配置完成了,讓咱們來測試一下。

很遺憾,並沒獲得咱們想要的對象實例。

7)繼承Spring.Web.Mvc.SpringMvcApplication類

喀,好像忘了些什麼,僅僅只是配置配好了,spring.net的容器尚未接管這一切……

在這咱們只須要讓Global.asax文件的MvcApplication類繼承於Spring.Web.Mvc.SpringMvcApplication類便可,根據須要override相關方就能夠了,很簡單是吧。

MvcApplication類 

複製代碼
 public class MvcApplication : Spring.Web.Mvc.SpringMvcApplication

{

protected override void RegisterRoutes(RouteCollection routes)

{

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

routes.MapRoute(

"Default", // Route name

"{controller}/{action}/{id}", // URL with parameters

new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults

);

}

}
複製代碼

改好後,咱們再運行一下程序,這下有木有?

 

SpringMvcApp.zip

0
0
« 上一篇: 編程演變
» 下一篇: Xna資源
posted @ 2011-06-24 17:46 xnaboy Views( 1428) Comments( 4) Edit 收藏

#1樓 2012-09-20 16:48 | jadesun  
對spring.net框架,在應用中有一個疑問,向您請教。

Global 中只要繼承 SpringMvcAppliaction 後。使用LoadRunnber軟件對一個Controller進行壓力測試,該Controller的Action方法內,只有一行語句Response.Write("Hello World");。

從性能監視器來看,w3wp進程持續增高,但始終下不來。若是Global中不繼承SpringMvcAppliaction的話,一切正常。

#2樓 2013-01-21 15:13 | 油紙傘  
請問,你這篇文章最後包的空引用錯誤解決了麼,個人也出現這個錯誤了,可是我明明已經配置singleton="false"了啊

#3樓 2013-07-25 22:38 | Auther709  

這個錯誤是什麼狀況的?求解啊

#4樓 [ 樓主] 2013-08-02 13:45 | xnaboy  
@ Auther709
估計是配置錯誤,注意類型type的格式以下:
<object id="Hello" type="SpringMvcApp.Models.Hello, SpringMvcApp"/>

逗號前是類的全名(包含命名空間),逗號後面是類所在的程序集名稱。

相關文章
相關標籤/搜索