Spring.net与Asp.net Mvc结合示例
2012-06-26 10:13
465 查看
一、闲话
因为项目要用到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项目:
![](http://pic002.cnblogs.com/images/2011/131577/2011062417285745.png)
我们在Model文件夹里新建一个IHello接口和一个Hello实现类
IHello接口
Hello实现类
在SayHelloWorld方法中return了一个字符串”Hello world!”。
让我们来测试它吧,在HomeController里我们写下如下代码:
HomeController类
我们实例化了一个Hello对象,硬编码的方式,先运行一下看看效果:
![](http://pic002.cnblogs.com/images/2011/131577/2011062417375274.jpg)
上面运行一切正常,好了让我们来引入spring.net
3)引入spring组件
上面提到的spring.net的组件引入到工程里面来:
![](http://pic002.cnblogs.com/images/2011/131577/2011062418024862.png)
4)修改web.config添加Spring配置:
web.config
我们引用了另外的一个xml文件Spring.xml,用于配置对象和设置相关依赖。
5)移除掉具体的实现
在配置对象之前,我们先把HomeController代码改一改,移除掉具体的实现:
6)配置对象和设置相关依赖
Spring.xml
这里需要注意一点的是,对象默认配置是单例的,Controller不是单例的,所以这里把singleton设置为false。
是否这样就已经配置完成了,让我们来测试一下。
![](http://pic002.cnblogs.com/images/2011/131577/2011062417402980.jpg)
很遗憾,并没得到我们想要的对象实例。
7)继承Spring.Web.Mvc.SpringMvcApplication类
喀,好像忘了些什么,仅仅只是配置配好了,spring.net的容器还没有接管这一切……
在这我们只需要让Global.asax文件的MvcApplication类继承于Spring.Web.Mvc.SpringMvcApplication类即可,根据需要override相关方就可以了,很简单是吧。
MvcApplication类
改好后,我们再运行一下程序,这下有木有?
因为项目要用到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项目:
![](http://pic002.cnblogs.com/images/2011/131577/2011062417285745.png)
我们在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对象,硬编码的方式,先运行一下看看效果:
![](http://pic002.cnblogs.com/images/2011/131577/2011062417375274.jpg)
上面运行一切正常,好了让我们来引入spring.net
3)引入spring组件
上面提到的spring.net的组件引入到工程里面来:
![](http://pic002.cnblogs.com/images/2011/131577/2011062418024862.png)
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。
是否这样就已经配置完成了,让我们来测试一下。
![](http://pic002.cnblogs.com/images/2011/131577/2011062417402980.jpg)
很遗憾,并没得到我们想要的对象实例。
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 ); } }
改好后,我们再运行一下程序,这下有木有?
相关文章推荐
- Spring.net与Asp.net Mvc结合示例
- Spring.net与Asp.net Mvc结合入门示例
- 【转载】Spring.net与Asp.net Mvc结合入门示例
- Spring.NET企业架构 Nhibernate + .NET三层+Spring.net(ado)+ ASP.NET MVC完美结合
- Asp.net MVC 示例项目"Suteki.Shop"分析之---Model和Service
- Asp.net MVC 示例项目"Suteki.Shop"分析之---Model和Service
- 在ASP.NET MVC项目中使用RequireJS库的用法示例
- 搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (三)实现数据库接口层和业务逻辑层
- Asp.net MVC 示例项目"Suteki.Shop"分析之---NVelocity模版引擎
- asp.net mvc中自行搭建实现工厂模式的spring.net+三层架构 (15-4-20)
- ASP.NET MVC:窗体身份验证及角色权限管理示例
- ASP.NET MVC Web API使用示例
- Spring.NET教程(十七)——整合NHibernate和ASP.NET MVC(基础篇)
- Asp.net mvc + EF + Spring.net 搭建
- ASP.NET MVC实践系列5-结合jQuery
- Asp.net Mvc Framework 一 (安装并建立示例程序)
- asp.net mvc 两级分类联动方法示例
- asp.net mvc 两级分类联动方法示例
- 在ASP.NET MVC中以post方式传递数组参数的示例
- asp.net mvc webapi 实用的接口加密方法示例