一、介绍

  因为项目要用到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

            );

        }

    }

改好后,我们再运行一下程序,这下有木有?

SpringMvcApp.zip

分类: Asp.net Mvc,Spring.net
好文要顶 关注我 收藏该文

xnaboy
关注 - 8
粉丝 - 0

+加关注

0
0

« 上一篇:编程演变
» 下一篇:Xna资源

posted @ 2011-06-24 17:46 xnaboy Views(1428) Comments(4) Edit 收藏

Post Comment
回复引用

#1楼 2012-09-20 16:48 | jadesun

对spring.net框架,在应用中有一个疑问,向您请教。

Global 中只要继承 SpringMvcAppliaction 后。使用LoadRunnber软件对一个Controller进行压力测试,该Controller的Action方法内,只有一行语句Response.Write("Hello World");。

从性能监视器来看,w3wp进程持续增高,但始终下不来。如果Global中不继承SpringMvcAppliaction的话,一切正常。

支持(0)反对(0)

回复引用

#2楼 2013-01-21 15:13 | 油纸伞

请问,你这篇文章最后包的空引用错误解决了么,我的也出现这个错误了,但是我明明已经配置singleton="false"了啊
支持(0)反对(0)

回复引用

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


这个错误是什么情况的?求解啊
支持(0)反对(0)

http://pic.cnblogs.com/face/416486/20130726112835.png

回复引用

#4楼[楼主]27419012013/8/2 13:45:35 2013-08-02 13:45 | xnaboy

@ Auther709
估计是配置错误,注意类型type的格式如下:
<object id="Hello" type="SpringMvcApp.Models.Hello, SpringMvcApp"/>

逗号前是类的全名(包含命名空间),逗号后面是类所在的程序集名称。

支持(0)反对(0)

刷新评论刷新页面返回顶部
发表评论

昵称:

评论内容:

不改了 退出 订阅评论

[Ctrl+Enter快捷键提交]

【推荐】50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
【推荐】极光开发者服务平台,五大功能一站集齐
【推荐】腾讯云域名+云解析 限时折扣抓紧抢购
【推荐】阿里云“全民云计算”优惠升级
【推荐】一小时搭建人工智能应用,让技术更容易入门
最新IT新闻:
· Mozila Firefox即将在新版本中采用新的全新Logo
· Note8发布:各方面都趋近完美的Android机皇,就是惊喜少了点
· 京东悄然更新隐私政策 可以注销京东账号
· 苹果提醒专业用户旧版应用将无法兼容macOS High Sierra
· Win10秋季创作者更新临近结束:将更密集发布Insider版更新
» 更多新闻...
最新知识库文章:

· 做到这一点,你也可以成为优秀的程序员
· 写给立志做码农的大学生
· 架构腐化之谜
· 学会思考,而不只是编程
· 编写Shell脚本的最佳实践

» 更多知识库文章...

转载于:https://www.cnblogs.com/Gabriel-CC/p/7421509.html

Spring.net与Asp.net Mvc结合示例《转载》相关推荐

  1. 搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架

    搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 学习网址哦: 很不错的 http://www.cnblogs.com/fly_dragon/archive/2010/ ...

  2. 开源框架完美组合之Spring.NET + NHibernate + ASP.NET MVC + jQuery + easyUI 中英文双语言小型企业网站Demo项目分析

    开源框架完美组合之Spring.NET + NHibernate + ASP.NET MVC + jQuery + easyUI 中英文双语言小型企业网站Demo,这个是一个在网上流传比较多的Spri ...

  3. ASP.NET MVC 2示例Tailspin Travel UI层分析

    Tailspin Travel 是一个旅游预订的应用程序示例,最新版本采用ASP.NET MVC 2技术构建,主要使用 DataAnnotations 验证, 客户端验证和ViewModels,还展示 ...

  4. ASP.NET MVC 2示例Tailspin Travel

    Tailspin Travel 是一个旅游预订的应用程序示例,最新版本采用ASP.NET MVC 2技术构建,主要使用 DataAnnotations 验证, 客户端验证和ViewModels,还展示 ...

  5. Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 6 ----asp.net MVC+Extjs

    现在mvc采用了ModelBinder, Controller中现在可以接受很多复杂类型的参数,但是对于jquery,extjs等js框架来说,更多的是采用json格式与服务器端传递参数更合理.对于简 ...

  6. Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 3 ----数据访问层

    在上一篇中,我们已经搭建起了整个解决方案的项目,并且建好了数据库,完成了实体类和Nhibernate映射文件.在本文中,将定义数据访问接口,并利用Nhibernate实现接口,利用Spring.net ...

  7. 搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (三)实现数据库接口层和业务逻辑层(转)...

    本篇是介绍我们完成数据库接口层和业务逻辑层的接口的设计和实现. 废话不多讲,还是怎么一步一步做. 第一步:设计IDao层.在MyWeb.WebTemp.IDao项目中添加IUserDao接口.代码如下 ...

  8. ASP.NET MVC

    文章:ASP.NET MVC 地址:https://docs.microsoft.com/zh-cn/aspnet/mvc/index 有简单介绍如何开发asp.net  MVC程序. 转载于:htt ...

  9. ASP.NET MVC 随笔汇总

    ASP.NET MVC 随笔汇总 为了方便大家浏览所以整理一下,有的系列篇幅中不是很全面以后会慢慢的补全的. 学前篇之: ASP.NET MVC学前篇之扩展方法.链式编程 ASP.NET MVC学前篇 ...

最新文章

  1. 人工智能值得关注的技术研究方向
  2. 会员教程翻译:性能和时间
  3. mysql log位置_MySql: log 位置
  4. 断言assert使用方法
  5. s4800扫描电镜的CSS3_Hitachi S-4800型场发射扫描电子显微镜+能谱
  6. java游戏有牧师_JAVA内部类是怎么玩儿的
  7. 对比图像分类五大方法:KNN、SVM、BPNN、CNN和迁移学习
  8. spring核心:bean工厂的装配 3
  9. mysql 关键字搜索 排名_mysql 的 查找 与 排序
  10. linux内核mtd分区,嵌入式Linux MTD分区调整(MX28)
  11. android TextView(文本框)详解
  12. tiny4412移植U-Boot 2020.07
  13. w7计算机文件夹打开怎么设置密码,怎样设置文件夹密码 Win7系统文件夹加密步骤详解...
  14. 【RTF】如何使用python读取RTF格式的文件
  15. 米家蓝牙温湿度计2 换用 LIR2032 充电电池的问题
  16. 通配符SSL证书知识 怎样获取通配符域名证书
  17. 大写字母与小写字母的转换
  18. 六张图,看懂前瞻性数据分析,该如何做
  19. 程序员的算法趣题Q13: 满足字母算式的解法
  20. 获取公众号文章小工具

热门文章

  1. js变量前有 var 与没有的区别
  2. HTML DOM Table 对象
  3. HDOJ1216 Assistance Required 打表
  4. 买卖股票的最佳时机|||
  5. go语言触发异常的场景
  6. linux进程的地址空间
  7. C++标准类型库string
  8. https安全传输揭秘
  9. PHP动物书总结14-17
  10. JS发送跨域Post请求出现两次请求的解决办法