zoukankan      html  css  js  c++  java
  • 【Spring.Net】- 环境搭建

    参考文章:http://www.cnblogs.com/GoodHelper/archive/2009/10/25/SpringNET_Config.html

    一、环境下载及安装

        到Spring的官方网站下载Spring.NET框架的安装文件(Spring.NET-1.3.0-RC1.exe)。目前Spring.NET最新的版本是1.3。下载并解压后就可以了。Spring.NET框架经常用到的一下几个文件:

    • Common.Logging.dll(必要)
    • Spring.Core.dll(必要)
    • Spring.Data.dll
    • Spring.Aop.dll(可选)
    • Spring.Data.NHibernate21.dll
    • Spring.Web.dll

         在基于XML的工厂中,这些对象定义表现为一个或多个<object>子节点,它们的父节点必须是<objects>(按:objects节点的xmlns元素是必需的,必须根据不同的应用添加不同的命名空间,以便有IDE的智能提示

    <objects xmlns="http://www.springframework.net">
        <object id="BLL" type="CloudLink.BLL.BLLFactory,CloudLink.BLL"></object>
        <object id="DAL" type="CloudLink.DAL.DALFactory,CloudLink.DAL"></object>
    </objects>

    二、实例化spring.net容器的方式

      1、实际物理地址

        首先需要新建一个Object.xml文件,然后从Spring.net手册中复制配置模板:

    <?xml version="1.0" encoding="utf-8" ?>
    
    <objects xmlns="http://www.springframework.net"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.net
            http://www.springframework.net/xsd/spring-objects.xsd">
      
      <object id="ProductDAO" type="DAO.ProductDAO, DAO">
    
      </object>
      
    </objects>

         修改这个文件的生成方式为“嵌入的资源”。注意一定要修改,不然容器初始化时就会抛异常。然后通过如下代码来获取这个配置文件:

    IResource input = new FileSystemResource(@"D:Objects.xml");  //实际物理路径
    IObjectFactory factory = new XmlObjectFactory(input);

         2、程序集下寻找配置文件

         这种方式需满足URI语法。file://文件名  assembly://程序集名/命名空名/文件名

    string[] xmlFiles = new string[] 
    {
         "file://Objects.xml"
    };
    IApplicationContext context = new XmlApplicationContext(xmlFiles);
    
    IObjectFactory factory = (IObjectFactory)context;
    Console.ReadLine();

          然后在应用程序配置文件添加如下配置:

    <?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="assembly://IocDemo/IocDemo/Objects.xml"/>//就是这句
          <resource uri="config://spring/objects" />
        </context>
    
        <objects xmlns="http://www.springframework.net">
          <description>一个简单的控制反转例子</description>
          <object id="ProductDAO" type="DAO.ProductDAO, DAO">
            <constructor-arg name="accessor" value="1"/>
          </object>
        </objects>
    
      </spring>
    
    </configuration>

        3、直接在应用程序配置文件中添加spring节点

    <?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 xmlns="http://www.springframework.net">//就是这一堆
          <description>一个简单的控制反转例子</description>
          <object id="ProductDAO" type="DAO.ProductDAO, DAO">
            <constructor-arg name="accessor" value="1"/>
          </object>
        </objects>
    
      </spring>
    
    </configuration>

         其中的<constructor-arg name="accessor" value="1"/>,表示ProductDAO的构造函数有一个名称accessor的参数,默认值为1。如果类有属性,那么需要添加<property name="属性名" value="默认值"/>。

    如果构造函数的参数为引用类型的,那么需要将引用类型也加上。详见:http://www.cnblogs.com/supheart/p/4317574.html

    三、普通调用方式、抽象工厂模式与IOC模式对比

         1、数据访问层

        public interface IProductDAO
        {
            /// <summary>
            /// 获取产品名称
            /// </summary>
            /// <returns></returns>
            string GetProductName();
        }
    
        public class ProductDAO : IProductDAO
        {
            private string _accessor;
    
            public ProductDAO(string accessor)
            {
                this._accessor = accessor;
            }
    
            /// <summary>
            /// 获取产品名称
            /// </summary>
            /// <returns></returns>
            public string GetProductName()
            {
                return "Hello, " + this._accessor + "! The product name is IPhone 7!";
            }
        }

        2、抽象工厂类

        public static class DataAccess
        {
            public static IProductDAO CreateProductDAO(string accessor) 
            {
                return new ProductDAO(accessor);
            }
        }

        3、三种方式

            static void Main(string[] args)
            {
                //一般方法
                NormalMethod();
    
                //抽象工厂模式
                FactoryMethod();
    
                //IOC方式
                IocMethod();
    
                Console.Read();
            }
    
            private static void NormalMethod()
            {
                IProductDAO dao = new ProductDAO("NormalMethod");
                Console.WriteLine(dao.GetProductName());
            }
    
            private static void FactoryMethod()
            {
                IProductDAO dao = DataAccess.CreateProductDAO("FactoryMethod");
                Console.WriteLine(dao.GetProductName());
            }
    
            private static void IocMethod()
            {
                IApplicationContext context = ContextRegistry.GetContext();
                IProductDAO dao = context.GetObject("ProductDAO", new[] { "IocMethod" }) as IProductDAO;
                Console.WriteLine(dao.GetProductName());
            }

           运行结果:

    本文示例代码:http://files.cnblogs.com/files/wangwust/IocDemo.zip

  • 相关阅读:
    176. Second Highest Salary
    175. Combine Two Tables
    172. Factorial Trailing Zeroes
    171. Excel Sheet Column Number
    169. Majority Element
    168. Excel Sheet Column Title
    167. Two Sum II
    160. Intersection of Two Linked Lists
    个人博客记录
    <meta>标签
  • 原文地址:https://www.cnblogs.com/wangwust/p/6605533.html
Copyright © 2011-2022 走看看