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

  • 相关阅读:
    打开安装 好的Microsoft Dynamics CRM 4.0 报错误为 Caller does not have enough privilege to set CallerOriginToken to the specified value 的解决办法
    基于 Windows Server 2008 的计算机对 Microsoft Dynamics CRM 4.0 的支持
    Microsoft Dynamics CRM 4.0 如何添加自定义按钮
    Microsoft Dynamics CRM 4.0 Plugin 取值,赋值,查询
    C# 中的 enum(枚举) 类型使用例子
    vue事件的绑定
    表单验证2
    node中模块
    node模块的引入
    node中的读文件
  • 原文地址:https://www.cnblogs.com/beniao/p/974930.html
Copyright © 2011-2022 走看看