zoukankan      html  css  js  c++  java
  • 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(测试)
        
       五.首先看看实体层的定义,我相信代码大家都看得懂就不多说了,直接贴上来。
       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,文章里难免会出现错误,目前
        Spring.net的人气太低了,希望对这有兴趣的朋友多多探讨,更希望这方面的高手能多指教。如文章中发现
        错误希望大家留言提出,我门大家一起学习,改进。

     本文示例程序下载:Spring.Demo.rar

  • 相关阅读:

    c#常用的基础概念
    Visual Studio2010+SOS.dll调试入门 摘自 http://www.cnblogs.com/luminji/archive/2011/01/27/1946217.html
    优化数据库之前的10个问题
    js数组清空的两种方式
    我的资源(网站, 工具)
    iis使用十大原则
    SQL2005分页存储过程
    温故而知新:Delegate,Action,Func,匿名方法,匿名委托,事件
    无法获得数据库 'model' 上的排他锁 网上搜索结果 IT
  • 原文地址:https://www.cnblogs.com/lyl6796910/p/4008820.html
Copyright © 2011-2022 走看看