Spring.NET依赖注入框架学习--简单对象注入

Spring.NET依赖注入框架学习--简单对象注入

在前面的俩篇中讲解了依赖注入的概念以及Spring.NET框架的核心模块介绍,今天就要看看怎么来使用Spring.NET实现一个简单的对象注入

常用文件

我们使用Spring.Net 框架经常要使用到的是以下文件:

  • Common.Logging.dll  包含了Spring.Net日志方面的功能(必须)
  • Spring.Core.dll       包含了Spring.Net 的核心库(必须)
  • Spring.Data.dll       包含了Spring.Net 的数据访问功能
  • Spring.Aop. dll       包含了Spring.Net 对面向切面编程(AOP)的支持
  • Spring.Web.dll       包含了Spring.Net 对ASP.NET进行了一系列功能扩展

Spring.NET常用接口

 IObjectFactory和IApplicationContext

IObjectFactory接口提供了一种高级配置机制,可以管理任何类型的对象,提供了配置框架和基本功能。

IApplicationContext是IObjectFactory的子接口,表示Spring IoC容器,负责在应用程序中实例化,配置和组装许多对象。容器通过读取配置元数据获取对象的实例化,配置和组装。配置元数据以XML表示。它增加了与Spring.NET面向方面编程(AOP)功能,消息资源处理(用于国际化),事件传播和Web应用程序上下文(如Web应用程序上下文)在Web应用程序中使用的更容易的集成,IApplicationContext增加了更多的企业特定功能。 IApplicationContext是IObjectFactory的一个完整的超集。

 

Spring.NET提供了几个IApplicationContext接口的实现。在独立的应用程序中,通常在应用程序的App.config文件中以编程方式或声明方式创建XmlApplicationContext的实例。

在Web应用程序中,Spring提供了一个WebApplicationContext实现,该实现通过在Web.config文件中添加自定义HTTP模块和HTTP处理程序来配置

下图是Spring.NET的工作原理图

如上图所示,Spring.NET IoC容器使用一种形式的配置元数据;这个配置元数据表示作为应用程序开发人员如何告诉Spring容器在应用程序中实例化,配置和组装对象。配置元数据以简单直观的XML格式提供

Spring.Net 的配置介绍

Spring.Net 的配置文件(一般情况下加入到App.Config或者Web.Config中)内容如下都是XML文件格式

配置文件中必须要要具有的节点

spring结点

spring结点 方式一

<spring>
  <context type="Spring.Context.Support.XmlApplicationContext, Spring.Core">
    <resource uri="file://objects.xml"/>
    <resource uri="assembly://MyAssembly/MyProject/objects-dal-layer.xml"/>
  </context>
</spring>

spring结点 方式二   

<spring>
  <context>
    <resource uri="file://objects.xml"/>
    <resource uri="assembly://MyAssembly/MyProject/objects-dal-layer.xml"/>
  </context>
</spring> 

 <context>节点的type属性是可选的,在Windows应用中,其默认值就是Spring.Context.Support.XmlApplicationContext,所以方式一和方式二完全相同

spring和context节点的名称不是任意的,必须是"spring"和"context",Spring.NET本身将"spring/context"作为字符串常量定义在了AbstractApplicationContext类中以表示上下文的节点名称所以这个结点名称是不能随便改的,若要引用由以上配置创建的容器,可使用下面的代码:

IApplicationContext ctx = ContextRegistry.GetContext();

ContextRegistry类既可用来初始化应用程序上下文,也可用来以服务定位器风格对容器中的对象进行访问,注意,使这一切成为可能的是Spring.Context.Support.ContextHandler类,该类实现了FCL的IConfigurationSectionHandler接口。必须在.NET配置文件的<configSections>节点中注册这个类,注册了这个节点处理器后,配置文件中的<spring>节点才能起作用,如下所示:

configSections结点

<configSections>
  <sectionGroup name="spring">
    <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
  </sectionGroup>
</configSections> 

源数据对象xml文件格式

<objects xmlns="http://www.springframework.net">
  <object id="..." type="...">
    <!-- collaborators and configuration for this object go here -->
  </object>
  <object id="...." type="...">
    <!-- collaborators and configuration for this object go here -->
  </object>
  <!-- more object definitions go here -->
</objects>

id属性是用来标识单个对象定义的字符串。 type属性定义对象的类型,并使用完全限定的类型名称,包括程序集名称。

  <object id="对象名称" type="命名空间.类名,程序集名称">
    //对象成员
  </object>

实例介绍

Person.cs

/*****************************************************
 * ProjectName:  Spring.NET01
 * Description:
 * ClassName:    Person
 * CLRVersion:   4.0.30319.42000
 * Author:       JiYF
 * NameSpace:    Spring.NET01
 * MachineName:  JIYF_PC
 * CreateTime:   2018/1/14 11:59:12
 * UpdatedTime:  2018/1/14 11:59:12
*****************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Spring.NET01
{
    public class Person
    {
        public Person()
        { }
        ~Person()
        { }
        public void print()
        {
            Console.WriteLine("我是一个Person对象");
        }
    }
}

根据配置文件格式我们配置一个Person对象

App.config文件

<?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"></resource>
    </context>
    <objects xmlns="http://www.springframework.net">
      <!--一个person对象-->
      <object id="person1" type="Spring.NET01.Person,Spring.NET01">
        
      </object>
    </objects>

  </spring>
</configuration>

通过Sprint.NET容器注入对象

第一步引用Spring.NET动态库文件,这里只需要引用Spring.Core.dll 和Common.Logging.dll动态库文件即可

代码测试:

    class Program
    {
        static void Main(string[] args)
        {
            //普通对象创建
            Person person = new Person();
            person.print();

            //通过Spring.NET ioc注入对象
            IApplicationContext ctx = ContextRegistry.GetContext();
            Person bennanhai = (Person)ctx.GetObject("person1");
            bennanhai.print();

            Console.Read();
        }
    }

执行结果:

这样一个简单的依赖注入例子就实现了

源代码工程下载

 

posted @ 2018-01-14 12:30  JiYF  阅读(613)  评论(0编辑  收藏  举报