简单的Spring.Net示例

原创 2005年03月02日 10:17:00

简单的Spring.Net示例

    Spring.NET是Java上Spring框架的.net移植版,目前版本为RC2,包含全功能的IOC容器,后续版本将包含AOP、ASP.NET、Remoting和数据存取。
    IOC将接口的具体实现实例化过程转移,不再采用硬编码,改由IOC容器来实例化,IOC容器读取配置文件,再通过反射来实例化接口的具体实现,达到调用调用者和被调用者解耦目的,与工厂模式相比解耦更彻底。
关于IOC的更多信息可以参考文章
http://www.martinfowler.com/articles/injection.html

相关资源下载:
http://www.springframework.net/
程序也可以从这里下载
http://sourceforge.net/projects/springnet/

这个例子演示一下动物吃草,狗吃肉,羊吃草,例子中可能有不当之处,仅仅是为了演示,请勿钻牛角尖

1、新建一个项目,引用Spring.Core;

2、新建两接口:IAnimal和IFood

 public interface IAnimal
 {
  string Eat(int qty);//吃多少
 }

 public interface IFood
 {
  string Name//食物名
  {
   get;
   set;
  }

  string Unit//食物的计量单位
  {
   get;
  }

 }

3、新建两动物:Dog和Sheep

 public class Dog : IAnimal
 {
  private IFood _food;
  private string _name;

  public Dog(string name)//狗名
  {
   _name = name;
  }

  public IFood Food//吃的
  {
   set
   {
    _food = value;
   }
   get
   {
    return _food;
   }
  }

  public string Eat(int qty)//吃了啥
  {
   return string.Format("Dog {0} ate {1} {2} {3}",_name,qty,_food.Unit,_food.Name);
  }
 }

 public class Sheep : IAnimal
 {
  ...//同Dog,如果你愿意,可以重构一下用继承:)

  public string Eat(int qty)
  {
   return string.Format("Cat {0} ate {1} {2} {3}",_name,qty,_food.Unit,_food.Name);
  }
 }

4。新建两配置文件:app.config和sheep.config

app.config内容:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>

    <configSections>
        <sectionGroup name="spring">
            <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
            <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
        </sectionGroup>
    </configSections>
 
    <spring>
   
        <context>
            <resource uri="config://spring/objects"/>
        </context>
       
        <objects>
            <description>An  example that demonstrates simple IoC features.</description>
     <!--
            动物接口的具体实现,狗名旺财,吃鲜猪肉
            -->
            <object name="anAnimal" type="SpringTest.Dog, SpringTest">
  <constructor-arg index="0">
                    <value>WangCai</value>
                </constructor-arg>
                <property name="food">
                    <ref object="trueFood" />
                </property>
            </object>

            <!--
            实现真正的食物
            -->
            <object name="trueFood" type="SpringTest.Meat, SpringTest">
                <property name="Name">
                    <value>Fresh Pig Meat</value>
                </property>
            </object>
        </objects>

    </spring>
   
</configuration>

sheep.config内容:
 <?xml version="1.0" encoding="utf-8" ?>
        <objects>
            <description>An  example that demonstrates simple IoC features.</description>
     <!--
            动物接口的具体实现,多利羊吃草
            -->
            <object name="anAnimal" type="SpringTest.Sheep, SpringTest">
  <constructor-arg index="0">
                    <value>Dolly</value>
                </constructor-arg>
                <property name="food">
                    <ref object="trueFood" />
                </property>
            </object>

            <object name="trueFood" type="SpringTest.Grass, SpringTest">
                <property name="Name">
                    <value>Green Grass</value>
                </property>
            </object>
        </objects>

5、新建一窗体,放两按钮,一文本框

using System.Configuration;
using Spring.Context;
using Spring.Context.Support;

加入方法:
 private void Display(IApplicationContext ctx)
 {
  try
  {
   IAnimal a = ctx.GetObject("anAnimal") as IAnimal;
   this.textBox1.Text = a.Eat(3);
  }
  catch (Exception ex)
  {
   this.textBox1.Text = ex.Message;
  }
 }

按钮事件:
 Display(ConfigurationSettings.GetConfig("spring/context") as IApplicationContext);

 Display(new XmlApplicationContext("sheep.config"));

附:如果需要原程序,请去油箱csharpdp@163.com获取,为防误删除,放在已删除文件夹,口令为csharpdp。

如果运行时出错并显示..Spring.Core强名称...请运行sn -Vr *,65e474d141e25e07

1. Spring.net入门Demo

网上有很多Spring.Net的入门教程,并提供了详细的Demo,但是照着一步步做下来,却会出现各种错误。 经研究,攻克了这些问题,将Demo成功运行起来了。 现将极度简化的Demo总结如下: 1. ...
  • strwangfan
  • strwangfan
  • 2016年04月12日 16:19
  • 350

Spring.NET学习笔记1——控制反转(基础篇) Level 200

http://www.cnblogs.com/GoodHelper/archive/2009/10/25/Spring_NET_IoC.html 在学习Spring.NET这个控制反转(Io...
  • zunguitiancheng
  • zunguitiancheng
  • 2015年12月06日 11:39
  • 388

最简单的Vuex示例

最简单的Vuex示例学习Vuex,弄个最简单的例子备忘一下,mapGetters, mapActions, mapMutations, state都用到了。1.老规矩,vue-cli脚手架来一下vue...
  • tanmx219
  • tanmx219
  • 2017年11月20日 11:01
  • 208

Spring.NET教程—环境搭建(基础篇)

一、环境下载及安装     到Spring的官方网站下载Spring.NET框架的安装文件(Spring.NET-1.3.0-RC1.exe)。目前Spring.NET最新的版本是1.3。下载并...
  • fengxu511
  • fengxu511
  • 2014年02月26日 17:09
  • 1282

一步一步学Spring.NET——1、Spring.NET环境准备

Spring.NET 1.3.2下载地址:http://down.51cto.com/data/861700 下载后解压   Spring.NET-1.3.2.7z:这个里面有我们需要用到的所有东西。...
  • zouyujie1127
  • zouyujie1127
  • 2014年12月18日 22:02
  • 4744

SPRING.NET 配置对象属性注入的例子

有几年没用spring.net了,下星期打算在项目里面用一下,毕竟注入能力太强大了。 首先还是用NuGet引用一下 Install-Package Spring.Core 下面创建三个类,其中一个...
  • lee576
  • lee576
  • 2015年07月11日 19:44
  • 2938

简单的Socket示例

【服务器端步骤】 初始化Windows Socket库 创建Socket: socke函数 绑定Socket: bind函数 监听Socket: listen 接受Socket:accept...
  • qq_27991659
  • qq_27991659
  • 2016年05月24日 15:04
  • 556

ASP.NET MVC 整合 Spring.net- Controller注入

http://blog.csdn.net/educast/article/details/7691925 我们都知道Asp.net MVC自有一套执行机制。 通过分析MVC的MvcHand...
  • whbo111
  • whbo111
  • 2016年04月26日 08:59
  • 399

网友对spring.net的理解:(为什么要用晦涩难懂的spring?)

1、你在学习的时候就那点代码量,随便在Action中new一new 无所谓,当你的项目很大的时候,代码一多你每个Action再去new DAO的时候你就知道有多么痛苦的,而且你每new一次就给你产生一...
  • cctvcqupt
  • cctvcqupt
  • 2014年10月25日 22:38
  • 1533

spring.net官网下载

第一种,简单粗暴直接 http://repo.springsource.org/libs-release-local/org/springframework/spring/3.2.4.RELEASE...
  • angle860123
  • angle860123
  • 2015年05月29日 14:09
  • 2178
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:简单的Spring.Net示例
举报原因:
原因补充:

(最多只允许输入30个字)