zoukankan      html  css  js  c++  java
  • 【转载】Spring.net与Asp.net Mvc结合入门示例

    Spring.net与Asp.net Mvc结合入门示例

    一、闲话

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

     

     

     

     

     

    ---------------------------------

     

     

    [Spring.NET IoC] 之一:基本信息

    [ 2006-06-27 14:47:42 | 作者: yuhen ]

    Spring.NET 移植自著名的 Java 开源项目 —— Spring,借助于 .NET 强大的反射机制,甚至拥有比原 Java 版本更强大的功能。只是不知道什么原因,在 .NET 领域似乎没有多少热度,其影响力甚至不如 Castle。因准备在个人项目中使用 IoC,因此花些时间对 Spring.NET 和 Castle 都作一些了解,本文权作学习笔记。

    Spring.NET 的宣传口号中有 "non-invasiveness. Quite simply" 的字样,表示是非入侵且易用的,当然作为一个IoC容器,这些都是最基本的特征。

    在 Spring.NET IoC 中最核心的内容应该是 IObjectFactory、IApplicationContext、IObjectDefinition 这三个接口了。IObjectFactory 是核心容器接口,负责管理容器内的注入对象,而 IApplicationContext 则是 IObjectFactory 的继承,它扩展了一些功能。IObjectDefinition 是注入对象的定义接口,供 IObjectFactory / IApplicationContext 调用。

    大多数时候我们会选择 IApplicationContext 接口的实现类来操控 Spring.NET IoC 容器。

    1. Spring.Context.Support.ContextRegistry 
    将配置信息写入 app.config / web.config 时所使用该类。

    2. Spring.Context.Support.XmlApplicationContext
    使用独立的 xml 配置文件,或者使用多个 xml 配置文件时,使用该类。

    3. Spring.Context.Support.StaticApplicationContext 
    直接在代码中装配容器时,使用该类。

    当然,你还可以使用 Spring.Objects.Factory.Xml.XmlObjectFactory 等直接实现 IObjectFactory 的类型。

    作为该篇的结束,写一个简单的 "Hello World" 尝试一下。

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Threading;
    using Spring.Core;
    using Spring.Context;
    using Spring.Context.Support;
    
    namespace ConsoleApplication1.SpringNet
    {
        public class HelloWorld
        {
            public override string ToString()
            {
                return "Hello, World!";
            }
        }
    
        public class Program
        {
            static void Main(string[] args)
            {
                StaticApplicationContext context = new StaticApplicationContext();
                context.RegisterPrototype("HelloWorld", typeof(HelloWorld), null);
    
                object o = context.GetObject("HelloWorld");
                Console.WriteLine(o);
            }
        }
    }

     

  • 相关阅读:
    SMR磁盘学习1
    练笔-字符串,向量和数组6
    练笔-字符串,向量和数组5
    练笔-字符串,向量和数组4
    练笔-字符串,向量和数组3
    练笔--字符串,向量和数组2
    Redis系列-存储篇hash主要操作函数小结
    Redis系列-存储篇string主要操作函数小结
    Redis系列-远程连接redis并给redis加锁
    Pjax的使用
  • 原文地址:https://www.cnblogs.com/fx2008/p/2283894.html
Copyright © 2011-2022 走看看