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. The Swift Programming Language-官方教程精译Swift(4)字符串和字符

    String 是一个有序的字符集合,例如 "hello, world", "albatross".Swift 字符串通过 String 类型来表示,也可以表示为 ...

  2. 远程调用之RMI技术

    ---恢复内容开始--- RMI已经不是什么新的技术了,但是相对于webservice来说,rmi比较简单,比较适合一些小的应用,下面的helloword列子可以介绍rmi的相关技术 服务器端代码: ...

  3. ckplayer

    ckplayer 的使用基本功能实现(一) 有个项目里用到视频播放功能,虽然是国产的插件,但我觉得做的还是不错,而且是免费使用,顺便支持下国内的一些项目(O(∩_∩)O~). 一.首先去官网下载 插件 ...

  4. 初探async await 实现多线程处理

    初探async await 实现多线程处理 这是微软关于Async的介绍:http://msdn.microsoft.com/en-us/library/hh156513.aspx 这是await : ...

  5. VS2015集成新潮工具4

    VS2015集成新潮工具(四)   本课程来源与微软connect视频教程,Modern Web Tooling in Visual Studio 2015 本课程主要讲下当下流行的前端工具 bowe ...

  6. 使用sqlldr向Oracle导入大的文本(txt)文件

    我们有多种方法可以向Oracle数据库里导入文本文件,但如果导入的文本文件过大,例如5G,10G的文本文件,有些方法就不尽如意了,例如PLSQL Developer中的导入文本功能,如果文本文件过大, ...

  7. [译]JVM运行时数据区

    (本篇文章翻译自JVM Run-Time Data Areas) 这是我阅读JVM规范的笔记,而且我画了一个图来帮助我理解. 1.每一个单独的线程(非共享的)的数据区 针对每一个单独的线程的数据区包括 ...

  8. artTemplate模板

    1.介绍 新一代 javascript 模板引擎. 2.性能(引) 1.性能卓越,执行速度通常是 Mustache 与 tmpl 的 20 多倍(性能测试) 2.支持运行时调试,可精确定位异常模板所在 ...

  9. 【SSRS】入门篇(一) -- 创建SSRS项目

    原文:[SSRS]入门篇(一) -- 创建SSRS项目 在本篇中,您将学习如何在 SQL Server Data Tools (SSDT) 中创建报表服务器项目. 报表服务器项目用于创建在报表服务器中 ...

  10. 在 InstantRails 环境下,安装使用 redMine

    在 InstantRails 环境下,安装使用 redMine 分类: Redmine2009-06-01 10:35 732人阅读 评论(0) 收藏 举报 characterrailsencodin ...