Spring net與Asp net Mvc結合示例
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
一、閒話
因為專案要用到Ioc框架,所以要為Ioc框架選型,優秀的Ioc框架好幾款,例如:sping.net,castle,unity……當然還不止三款,還有其它的Ioc框架,castle跟unity使用上比較相近,spring.net跟前兩者使用上差異較大些。資料、文件和博文方面spring.net>castle>unity。這三個都有大的強大的團隊支援,我感覺spring.net做得最好,無論更新力度、文件和示例都很給力。
鑑於spring.net的功能、資料文件、博文等比較完善豐富,再加上本人對spring.net相對較熟悉一些,人員培訓等都較容易,因此選用了spring.net作為專案的Ioc框架。
二。Spring.net與Asp.net MvC結合的入門示例
1)依賴元件
這裡需要用到Spring.net以下元件:
Common.Logging.dll
Spring.Core.dll
Spring.Web.Mvc.dll
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
);
}
}
改好後,我們再執行一下程式,這下有木有?