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

  • 相关阅读:
    (转贴)Visual Studio2005 + Visual SourceSafe 2005 实现团队开发、源代码管理、版本控制
    vss2003的资料说明,转贴自MSDN
    非常经典的网络蜘蛛示例,我是转载在这里的
    Vsi的路径所在
    (转)三种模拟自动登录和提交POST信息的实现方法
    (转)关于网络蜘蛛的知识
    (转)thin的制作DataGrid的HTC,转来自己用做开发
    转帖:麻雀虽小,五脏俱全-C# 创建windows服务、socket通讯实例
    Google Maps API编程资源大全
    C#实现的根据年月日计算星期几的函数(转)
  • 原文地址:https://www.cnblogs.com/wangwust/p/6605533.html
Copyright © 2011-2022 走看看