• Spring.Net-DI依赖注入和Ioc控制反转


    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创建对象

    1             IApplicationContext ctx = ContextRegistry.GetContext();
    2             IObjectFactory objectFactory = (IApplicationContext)ctx;
    3 
    4             //IPersonDao personDao = ctx.GetObject("PersonDao") as IPersonDao;
    5             IPersonDao personDao = objectFactory.GetObject("PersonDao") as IPersonDao;
    6             personDao.Save();

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

    1             IResource input = new FileSystemResource(@"B:ProjectSpringNetStudySpringNetStudySpringNetStudy.ControlObjects.xml");
    2             IObjectFactory factory = new XmlObjectFactory(input);
    3             IPersonDao personDao = factory.GetObject("PersonDao") as IPersonDao;
    4             personDao.Save();
    5             Console.ReadLine();

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

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

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

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

     1 <?xml version="1.0" encoding="utf-8" ?>
     2 <configuration>
     3 
     4   <configSections>
     5     <sectionGroup name="spring">
     6       <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core" />
     7       <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
     8     </sectionGroup>
     9   </configSections>
    10 
    11   <spring>
    12     
    13     <context>
    14       <resource uri="file://Objects.xml"></resource>
    15       <resource uri="config://spring/objects" />      
    16     </context>
    17 
    18 
    19     <objects xmlns="http://www.springframework.net">
    20     </objects>
    21     
    22   </spring>
    23 
    24 </configuration>

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

    1             IApplicationContext ctx = ContextRegistry.GetContext();
    2             IObjectFactory objectFactory = (IObjectFactory)ctx;
    3 
    4             //IPersonDao personDao = ctx.GetObject("PersonDao") as IPersonDao;
    5             IPersonDao personDao = objectFactory.GetObject("PersonDao") as IPersonDao;
    6             personDao.Save();
  • 相关阅读:
    字母统计
    特殊乘法
    一年的第几天
    找中位数
    查找学生信息
    Hdu 1009 FatMouse' Trade
    Hdu 1012 u Calculate e
    Hdu 1005 Number Sequence
    Hdu 1008 Elevator
    Hdu 1003 Max Sum
  • 原文地址:https://www.cnblogs.com/guichi/p/4603388.html
Copyright © 2020-2023  润新知