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
);
}
}
改好後,咱們再運行一下程序,這下有木有?
Global 中只要繼承 SpringMvcAppliaction 後。使用LoadRunnber軟件對一個Controller進行壓力測試,該Controller的Action方法內,只有一行語句Response.Write("Hello World");。
從性能監視器來看,w3wp進程持續增高,但始終下不來。若是Global中不繼承SpringMvcAppliaction的話,一切正常。