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

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

  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.net的IOC容器例子Demo

转载于:https://www.cnblogs.com/wangjei155/archive/2009/06/09/1499568.html

Spring.net 控制反转(IoC)容器_(收集)相关推荐

  1. java-12:spring MVC - 控制反转IOC,依赖注入DI

    学习spring框架之前,先理解几个概念: 1.第一部分:依赖倒置原则 2.第二部分:控制反转,控制反转容器(实例) 3.第三部分:控制反转,控制反转容器(全面理解,面试题) 综合性理解:控制反转(I ...

  2. Spring中控制反转IoC理论推导

    Spring中的IoC是一种思想.所谓控制反转,也就是从创建对象的主动权在程序员手中,到创建对象的主动权在用户手中.控制反转官方定义是一种通过描述(XML或注解)并通过第三方生产或获取特定对象的方式, ...

  3. Spring的控制反转与依赖注入

    学习过Spring的都知道Spring有三大核心的概念,分别是控制反转(IOC).依赖注入(DI)和面向切面编程(AOP).今天就来聊聊我对控制反转和依赖注入的了解,至于面向切面编程放到后面讲解. 一 ...

  4. 浅析Spring——控制反转IoC

    目录 1. IoC理论推导 2. 什么是IoC? 3. 引入DI 4. IoC容器 5. 注入对象的四种方法 1.基于接口 2.基于setter 3.基于构造函数 4.基于注解 6. 两种IoC实现方 ...

  5. Spring的控制反转(IOC)和依赖注入(DI)具体解释

    Spring的控制反转(IOC)和依赖注入(DI)具体解释 首先介绍下(IOC)控制反转: 所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的.这样控制器就有应 ...

  6. ioc控制反转_深入理解依赖注入(DI)和控制反转(IOC)

    转载本文务必须注明出处.微信号(Yemeir_com).以及添加原文链接. 为什么要使用依赖注入 使用依赖注入(DI)可以使控制者与抽象实现者松耦合,便于单元测试.通过控制反转(IOC)的设计原理来减 ...

  7. 控制反转IOC与依赖注入DI

    为什么80%的码农都做不了架构师?>>>    1. IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最 ...

  8. 控制反转(IoC)与依赖注入(DI)详解

    文章目录 什么是控制反转(IoC) 控制反转(IoC)有什么作用 控制反转(IoC)是怎么分类的 依赖注入 接口注入 Setter方法注入 构造器注入 依赖查找 上下文依赖查找(Contextuali ...

  9. Spring是什么?IoC容器的理解

    1. Spring是什么? 我们通常所说的 Spring 指的是 Spring Framework(Spring 框架)⽤⼀句话概括 Spring:Spring 是包含了众多⼯具⽅法的 IoC 容器. ...

  10. Spring 的控制反转/依赖注入

    第一章 Spring 的控制反转/依赖注入 回顾 增删改查. 课前测: 本章内容 spring:春天 IOC:将创建对象的权力交给 spring 核心容器去控制.工厂模式 BeanFactory: 懒 ...

最新文章

  1. ANSI C中的sizeof详解
  2. Vue + Spring Boot 项目实战(三):使用IntelliJ IDEA快速生成 Vue.js 项目
  3. centos查看yum包所有版本(查看包版本)
  4. java jar包与配置文件的写法
  5. pandas 作图 统计_pandas数据作图方法
  6. 第P题 扔盘子(双重循环就行) 详解=====有一口井,井的高度为N,每隔1个单位它的宽度有变化。现在从井口往下面扔圆盘,如果圆盘的宽度大于井在某个高度的宽度
  7. SharePoint 2010 BDC Model项目部署出错:“The default web application could not be determined.”...
  8. linux文件名变量,文件名通配符、变量以及管道知识点的总结
  9. Elasticsearch2.4.X 搜索引擎框架 安装配置
  10. 消费滚动滴log日志文件(flume监听,kafka消费,zookeeper协同)
  11. linux tar 绝对路径,tar打包使用绝对路径详解
  12. IBM ServerGuide引导盘全系列下载网址
  13. 【今年年会,你中奖了吗?】在线抽奖活动中如何实现中奖概率的自适应调整...
  14. zblog怎么定位html代码,zblog模板修改常用调用标签代码
  15. VHDL串口通信 在FPGA开发板上测试 并解决没有识别到下载接口USB_Blaster(No Hardware问题)
  16. java记忆翻牌_html5记忆翻牌游戏
  17. mybatis plus 出现 Invalid bound statement (not found)
  18. N沟道的Vgs是正的,P沟道的Vgs是负的
  19. PDF文件压缩和优化的原理是什么?看了这篇C#案例实践就知道了
  20. 关于p操作和v操作的理解

热门文章

  1. 计算机图形学完整笔记(二):光栅图形学算法
  2. 数位DP算法概述及习题
  3. 【POJ1958】【典型递推问题】汉诺塔问题
  4. 蓝队应对攻击的常用策略三
  5. Raki的读paper小记:How to Fine-Tune BERT for Text Classification?
  6. 242.有效的字母异位词(力扣leetcode) 博主可答疑该问题
  7. 445.两数相加II(力扣leetcode) 博主可答疑该问题
  8. linux mysql开发_Linux下MySQL数据库开发技术
  9. HADOOP高可用机制
  10. Ubuntu下安装php7.1的gd,mysql,pdo_mysql扩展库