Spring.Core作为整个Spring框架的基础,实现了依赖注入的功能。Spring框架的其它模块都要依赖或扩展该模块。

IObjectFactory接口,该接口实现了工厂模式,使用它可以帮我们创建对象,与具体的程序逻辑解耦。

IApplicationContext是IObjectFactory的扩展,增加了许多企业级的功能,包括使用资源文件进行文本本地化,事件传播,资源装载等等。

Spring.Net的配置

使用Spring.Net创建对象,需要在程序配置文件中配置
   1:配置spring.Core的核心处理类型

在configSections节点中新增Spring的sectionGroup节点,申明Spring.Net处理的类型

<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>

2:配置Spring框架如何创建对象的spring节点

spring定义了Spring.Net框架如何创建对象,Spring.Net框架使用这些配置信息,创建对象的。
     每一个object节点定义了一个类型创建的配置信息,type属性中第一个参数是类型的完整名称,第二个参数是类型所在的dll名称
     可以把spring节点中的objects节点单独放入另外一个Xml中

 <spring>

    <context>
<!--<resource uri="assembly://SpringNetStudy.Control/SpringNetStudy.Control/Objects.xml" />-->
<resource uri="config://spring/objects" />
</context> <objects xmlns="http://www.springframework.net">
<!-- Objects节点可以移动到其它地方-->
<description>一个简单的控制反转例子</description>
<object id="PersonDao" type="SpringNetStudy.Control.PersonDao, SpringNetStudy.Control" />
</objects> </spring>

Spring.Net创建对象

             IApplicationContext ctx = ContextRegistry.GetContext();
IObjectFactory objectFactory = (IApplicationContext)ctx; //IPersonDao personDao = ctx.GetObject("PersonDao") as IPersonDao;
IPersonDao personDao = objectFactory.GetObject("PersonDao") as IPersonDao;
personDao.Save();

创建IApplicationContext接口,使用该接口的GetObject()方法,其参数就是配置文件中的object节点的id属性值,依据type属性值,创建对象。返回object类型
     IApplicationContext是IObjectFactory的扩展,可以将IApplicationContext转换成IObjectFactory接口,调用其GetObject()方法。

             IResource input = new FileSystemResource(@"B:\Project\SpringNetStudy\SpringNetStudy\SpringNetStudy.Control\Objects.xml");
IObjectFactory factory = new XmlObjectFactory(input);
IPersonDao personDao = factory.GetObject("PersonDao") as IPersonDao;
personDao.Save();
Console.ReadLine();

在Sping.Net的配置文件中,将objects节点单独移出,放在一个单独的xml文件中,使用物理路径实例化IObjectFactory接口对象

             string[] xmlFiles = new string[] { "file://Objects.xml" };
IApplicationContext context = new XmlApplicationContext(xmlFiles);
IObjectFactory factory = (IObjectFactory)context;
IPersonDao personDao = factory.GetObject("PersonDao") as IPersonDao;
personDao.Save();
Console.ReadLine();

也可以在代码中指定在程序集中下寻找配置文件,这就需要将Objects.xml文件属性复制到输出目录选为始终复制

而最常用的做法是,在配置文件App.config或者Web.Config中添加自定义配置节点,这种做法是和将Objects节点放在配置文件中,是一样的效果

 <?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="file://Objects.xml"></resource>
<resource uri="config://spring/objects" />
</context> <objects xmlns="http://www.springframework.net">
</objects> </spring> </configuration>

那么在程序中不需要指定Objects.xml的位置,直接创建IApplicationContext或者IObjectFactory接口对象

             IApplicationContext ctx = ContextRegistry.GetContext();
IObjectFactory objectFactory = (IObjectFactory)ctx; //IPersonDao personDao = ctx.GetObject("PersonDao") as IPersonDao;
IPersonDao personDao = objectFactory.GetObject("PersonDao") as IPersonDao;
personDao.Save();

Spring.Net-DI依赖注入和Ioc控制反转的更多相关文章

  1. Spring的三大核心思想:IOC(控制反转),DI(依赖注入),AOP(面向切面编程)

    Spring核心思想,IoC与DI详解(如果还不明白,放弃java吧) 1.IoC是什么?    IoC(Inversion of Control)控制反转,IoC是一种新的Java编程模式,目前很多 ...

  2. 3、Spring的DI依赖注入

    一.DI介绍 1.DI介绍 依赖注入,应用程序运行依赖的资源由Spring为其提供,资源进入应用程序的方式称为注入. Spring容器管理容器中Bean之间的依赖关系,Spring使用一种被称为&qu ...

  3. Spring详解(二)------IOC控制反转

    我相信提到 Spring,很多人会脱口而出IOC(控制反转).DI(依赖注入).AOP等等概念,这些概念也是面试官经常问到的知识点.那么这篇博客我们就来详细的讲解 IOC控制反转. ps:本篇博客源码 ...

  4. Spring学习——DI(依赖注入)

    IOC容器,处理对象依赖关系 IOC与DI: IOC :是一个容器,创建对象的容器 DI :在容器创建对象后,处理对象的依赖关系,也叫依赖注入! 方式1:通过set方法注入值 可以给普通属性.集合属性 ...

  5. Spring:DI依赖注入的几种方式

    据我所学,spring实现依赖注入(DI)的方式分为三大类:基于构造器(构造方法)的依赖注入.基于setter的依赖注入.其他方式(c命名空间.p命名空间等).其中推荐使用setter方法注入,这种注 ...

  6. Spring详解(一)------IOC控制反转

    1.什么是 IOC? IOC-Inversion of Control,即控制反转.它不是什么技术,而是一种设计思想. 传统的创建对象的方法是直接通过 new 关键字,而 spring 则是通过 IO ...

  7. Spring-初识Spring框架-IOC控制反转(DI依赖注入)

    ---恢复内容开始--- IOC :控制反转 (DI:依赖注入)使用ioc模式开发 实体类必须有无参构造方法1.搭建Spring环境下载jarhttp://maven.springframework. ...

  8. DI依赖注入/IOC控制反转

    DI依赖注入# 啥都不说,直接上代码 <?php class UserController { private $user; function __construct(UserModel $us ...

  9. Ioc(控制反转)、DI(依赖注入)

    一篇非常好的有关控制反转和依赖注入非常不错的文章,简单易通,与大家共同学习,这里只引用了一篇文章,还有很多相关的文章可以通过文章引用地址来看,相信大家看完理解的就比较深刻了 文章摘自:http://j ...

随机推荐

  1. protobuf-net-data

    protobuf-net http://www.codeproject.com/Articles/642677/Protobuf-net-the-unofficial-manual https://g ...

  2. 第1章3节《MonkeyRunner源码剖析》概述:架构(原创)

    天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...

  3. WebView Android 调用js且须要获取返回结果

    Android webView调用js方法非常easy, webView.loadUrl("javascrpt:yourFunction()"); 可是此方法没有办法获取返回结果 ...

  4. Ubuntu10.04中间Leach协议一键安装

    半天后,尝试,引用网络上的零散资源,成品博客Leach协议ubuntu10.04在安装(12.04也可以在右侧安装,然而,实施效果的不,求解决~~),并制作了补丁. 一个关键的安装步骤如下面: 1.在 ...

  5. SQL Server 2012的附件失败,与硬链接的问题

    1.我在系统上做了硬链接,也就是把C盘的某个目录,映射为D盘. 2.把数据库文件mdf和ldf放入D盘.结果,SQL Server的企业管理器,无法从D盘里加载mdf或ldf文件,并且在目录下无法显示 ...

  6. 在Ubuntu 12.04 - 64bit中安装CodeSourcery时提示错误

    安装时提示错误,Your 64-bit Linux host is missing the 32-bit libraries requied to install and use Sourcery C ...

  7. 【蜗牛—漫漫IT路之大学篇(九) 】

    再来一篇叨叨的博客 近期,状态还是那个状态,人还是那个人. 前两天,感冒了,可能是宿舍阴面的事吧.然后,中午睡觉的时候穿着短袖披了一件外套,然后鼻子就不通气了.只是,前天晚上,我骑着崔国强的车子跑了不 ...

  8. 非接触式电子音乐控制器CHIMAERA

    本篇文章,我将介绍个有意思的设备. 她就是Chimaera,一个基于电磁场效应的非接触式电子音乐控制器. <弹奏Chimaera的声音> 霍尔效应传感器阵列及其周围部件组成了一个连续的2D ...

  9. sqlserver查询所有表的行数的sql语句

    原文:sqlserver查询所有表的行数的sql语句 select object_name(id),rowcnt from sysindexes where indid<2 and object ...

  10. codeblock 设置背景颜色

    今天觉得codeblock看着刺眼,想了想,能不能跟vs利用dark背景一样可以设置一个舒服的背景.于是就开始各种点击,各种摸索了. 1. 背景和各种颜色设置 不妨先说下vs中的设置是:工具(Tool ...