我在上一篇关于Spring.net的文章“Spring.NET框架简介及模块说明 ”中很详细的介绍了,本文就不旧话从提。我门就直奔主题吧。

  1.首先了解两个接口.

  IObjectFactory接口和IApplicationContext接口:他两个称为“容器”或“IOC容器”。

  Spring.net框架的核心原则是非侵入性。

  IObjectFactory接口是初始化、配置及管理对象的实际容器。

  IObjectFactory全限定名为Spring.Objects.Factory.IObjectFactory,IObjectFactory接口有多个实现,其中最

  常用的是Spring.Objects.Factory.XML.XmlObjectFactory。

  2.对象定义的XML文件

  在app.config或是web.config中加入

 <spring>
  <context type="Spring.Context.Support.XmlAppliationContext",Spring.Core"/>
  <resource uri=file://objects.xml//>
 </spring>
 注意:context的type属性是可以省略的。

  3.spring和context的顺序是有限制的,在Spring.net框架里已经将“spring/context”作为字符串常量定义在了AbstractApplicationContext类中以来表示上下文的接点名称。可通过:

  IApplicationContext context=ContextRegistry.GetContext();来获取接点值,这里要注意一点。在使用他的时候必须要使配置文件中的<spring>接点起作用,这样就得必须在.NET的配置文件<configSections>节点下注册类Spring.Context.Support.ContextHandler,它让ContextRegistry类可用来初始化应用程序上下文,它实现在FCL的IConfigurationSectionHandler接口

  3.XML对象定义可在<objects>节点注册

 <section name="objects" type="Spring.Context.Support.DefultSectionHandler,Spring.Core">

  4.Spring.net的IOC容器的简单实例----用简单三层来实现

  光说这么多没用,我门还是来点实际的,看看下面的这个简单实例:

  一.先建立项目随后添加引用Spring.Core程序集。

  二.引用System.Configuration----需要用到ConfigurationManager类的方法。

  三.配置.NET配置文件----具体配置如下:

 <?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>
    <!--这的配置根据实际的程序来的,UsersCompontents是程序集Spring.Demo.Compontext下的一个类-->
    <object name="Users"   
        type="Spring.Demo.Compontext.UsersCompontents,Spring.Demo.Compontent">
    </object>
   </objects>
  </spring>
 </configuration>

四.建立好项目的实体类和接口以及实现借口。

  下面是实例程序的结构图:Model(实体层),Service(接口),Compontent(实现接口的业务逻辑),SimpleTest(测试)

Spring.net(二)----初探IOC容器

  五.首先看看实体层的定义,我相信代码大家都看得懂就不多说了,直接贴上来。

  using System;
  using System.Collections.Generic;
  using System.Text;
  
  namespace Spring.Demo.Model
  {
  /// <summary>
  /// 用户类
  /// </summary>
  public class Users
  {
    /// <summary>
    /// 编号
    /// </summary>
    private int _oid;
    public int Oid
    {
      get { return _oid; }
      set { _oid = value; }
    }
  
    /// <summary>
    /// 姓名
    /// </summary>
    private string _name;
    public string Name
    {
      get { return _name; }
      set { _name = value; }
    }
  
    /// <summary>
    /// 性别
    /// </summary>
    private string _sex;
    public string Sex
    {
      get { return _sex; }
      set { _sex = value; }
    }
  
    /// <summary>
    /// 年龄
    /// </summary>
    private int _age;
    public int Age
    {
      get { return _age; }
      set { _age = value; }
    }
   }
  }

 六.在看接口的定义

   using System;
   using System.Collections.Generic;
   using System.Text;
   namespace Spring.Demo.Service
   {
    public interface IUsers
    {
      /// <summary>
      /// 返回用户的详细信息的方法
      /// </summary>
      /// <returns></returns>
      string GetUserInfo();
    }
  }
  七.实现接口方法的逻辑

   using System;
   using System.Collections.Generic;
   using System.Text;
   using Spring.Demo.Service;
   using Spring.Demo.Model;
  
   namespace Spring.Demo.Compontext
   {
    public class UsersCompontents:IUsers
    {
      public UsersCompontents()
      { }
  
      #region 获取用户信息
      public string GetUserInfo()
      {
       Users user = new Users();
       user.Oid = 1;
       user.Name = "Beniao";
       user.Sex = "Boy";
       user.Age = 25;
  
       return string.Format("编号:{0}--->姓名:{1}--->性别:{2}--->年龄:{3}",
         user.Oid,
         user.Name,
         user.Sex,
         user.Age);
     }
     #endregion
    }
  }

 

  八.通过Spring.net的IOC容器IApplicationContext从config文件中取得程序集信息和调用方法实现控制反转

   //从config文件中取得程序集信息
  IApplicationContext context = ConfigurationManager.GetSection("spring/context")
                  as IApplicationContext;
  //调用方法
  //Users为config文件里的配置节
  //<object name="Users"   
  //    type="Spring.Demo.Compontext.UsersCompontents,Spring.Demo.Compontent">
  //</object>
  IUsers user = context.GetObject("Users") as IUsers;
  Console.WriteLine(user.GetUserInfo());
  Console.Read();

  运行结果如下:

Spring.net(二)----初探IOC容器

  关于Spring.net的IOC容器就简单介绍在这里了,我也是刚学Spring.net,文章里难免会出现错误,目前

  Spring.net的人气太低了,希望对这有兴趣的朋友多多探讨,更希望这方面的高手能多指教。如文章中发现

  错误希望大家留言提出,我门大家一起学习,改进。

本例的代码

Spring.net的IOC容器例子Demo

 

posted on 2009-06-09 13:13  胜者为王  阅读(828)  评论(0编辑  收藏  举报