• Spring.net 控制反转(IoC)容器_(收集)


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

    Spring.net(二)----初探IOC容器

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

      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的IOC容器就简单介绍在这里了,我也是刚学Spring.net,文章里难免会出现错误,目前

      Spring.net的人气太低了,希望对这有兴趣的朋友多多探讨,更希望这方面的高手能多指教。如文章中发现

      错误希望大家留言提出,我门大家一起学习,改进。

    本例的代码

    Spring.net的IOC容器例子Demo

  • 相关阅读:
    Python-异常处理机制
    递归函数——斐波那契数列j
    函数及相关操作
    字符串及相关操作
    集合及相关操作
    元组
    字典
    列表元素增删改排操作
    multiprocessing模块简单应用
    02 for循环创建进程
  • 原文地址:https://www.cnblogs.com/wangjei155/p/1499568.html
Copyright © 2020-2023  润新知