我在上一篇关于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(测试)

   

init容器是什么意思 net ioc容器_spring


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

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,文章里难免会出现错误,目前

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

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


Spring.Demo.rar