【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());
        }

       运行结果:

 

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

posted @ 2018-08-13 14:48  wangwust  阅读(222)  评论(0编辑  收藏  举报