zoukankan      html  css  js  c++  java
  • spring.net 对象创建 几种情况

    多数情况下,容器会根据对象定义中的type属性值去直接调用相应类型的某个构造器。另外,还可以调用工厂方法来创建对象。(Spring.net中文手册)

    实例参考。

    (1)       Order类

    namespace IocTest.Entities

    {

        public class Order

        {

            public int Unid { get; set; }

            public string OrderName { get; set; }

            public string UserId { get; set; }

     

            public override string ToString()

            {

                return OrderName + ":" + Unid;           

            }

        }

    }

    (一)   构造器

    使用构造器时,不要求对象的特定类型,只要声明对象的类型(assembly)就可以了。方法如下:

    1.指明对象类型 type="类全名,程序集名"

    2.有一个无参的构造函数或者默认构造函数。

    Xml

    <object id="orderConstructor" type="IocTest.Entities.Order"></object>

     

    Test

    [Test(Description="constructor test")]

    public void TestOrderConstructor()

    {

        Order oo = XmlFactory.GetObject("orderConstructor") as Order;

        oo.OrderName = "constructor create Test order name";

     

        Console.WriteLine(oo.ToString());

    }

    (二)   静态工厂

    使用静态工厂方法创建对象时,除了要将对象定义的type属性设为包含静态工厂方法的类型外,还要设置一个名为factory-method的属性来指定静态工厂方法的名称。(Spring.net中文手册)

         Xml

    <!-- static facotry order-->

      <object id="OrderFactoryStatic" type="IocTest.Entities.OrderFactory"

              factory-method="CreateStaticInstance">

      </object>

    此对象type指定的是静态工厂类型,此对象的作用即为静态创建Order

    ②     OrderFactory类

    namespace IocTest.Entities

    {

        public class OrderFactory

        {

            public static Order CreateStaticInstance()

            {

                return new Order();

            }

     

            public Order CreateInstance()

            {

                return new Order();

            }

        }

    }

         Test

    [Test(Description="static factory")]

    public void TestStaticFactory()

    {

         Order oo = XmlFactory.GetObject("OrderFactoryStatic") as Order;

        oo.OrderName = "static factory create Test order name";

     

         Console.WriteLine(oo.ToString());

    }

    (三)   实例工厂

    通过实例工厂方法创建对象与通过静态工厂方法创建对象的配置方式类似。此时,实例工厂方法所在的对象必须也要配置在同一容器(或父容器)中。

    如果要通过实例工厂方法创建对象,对象定义就不能包含type属性,而要用factory-object属性引用工厂方法所在的对象;注意,该属性值必须是包含工厂方法的对象的名称,且该对象必须定义在当前容器或父容器中。工厂方法的方法名则通过factory-method属性指定。(Spring.net中文手册)

         Xml

    <!-- factory order instance-->

      <object id="OrderFactorySample" type="IocTest.Entities.OrderFactory">   

      </object>

      <object id="OrderFactoryInstance"  type="IocTest.Entities.OrderFactory"

               factory-method="CreateInstance"

               factory-object="OrderFactorySample">

    </object>

         Test

    [Test(Description = "instance factory test")]

    public void TestInstanceFactory()

    {

       Order oo = XmlFactory.GetObject("OrderFactoryInstance") as Order;

       oo.OrderName = "instance factory create Test order name";

     

       Console.WriteLine(oo.ToString());

    }

    (四)   泛型类型

    与普通对象相同。但要注意的是左尖括号要以&lt;来代替,右尖括号不用。

    Score<T> 类

    namespace IocTest.Entities

    {

        public class Score<T>

        {

            public int Unid { get; set; }

            public List<T> ScoreList { get; set; }

     

            public override string ToString()

           {

                string strReturn = string.Empty;

                foreach (T t in ScoreList)

                    strReturn += t.ToString();

                return strReturn;

            }

        }

    }

         Xml

      <!--generic test-->

      <object id="Score" type="IocTest.Entities.Score&lt;int>">   

      </object>

         Test

    [Test]

    public void TestGenericScore()

    {

        Score<int> cc=XmlFactory.GetObject("Score") as Score<int>;

        List<int> _list = new List<int>() { 11,2,66,9,0};

        cc.ScoreList = _list;

     

    Console.WriteLine(cc.ToString());

    }

  • 相关阅读:
    未能加载文件或程序集“System.EnterpriseServices, Version=4.0.0.0或2.0.0.0
    解决本地调用office组件成功,但是发布到IIS中出现的错误(检索COM类工厂中CLSID为{00024500-0000-0000-C000-000000000046}的组件时失败)
    未能找到类型或命名空间名称“Coco”(是否缺少 using 指令或程序集引用)
    SQL截取字段字符串的方法
    C# 128位AES 加密解密 (转)
    检索 COM 类工厂中 CLSID 为 {13C28AD0-F195-4319-B7D7-A1BDAA329FB8} 的组件时失败,原因是出现以下错误: 80040154
    js 获取时间比较全,留备用(zhuan)
    windows之如何把iso文件转换为VHD文件
    python之三行代码发送邮件
    RobotFramework第二篇之web自动化
  • 原文地址:https://www.cnblogs.com/wujy/p/2931619.html
Copyright © 2011-2022 走看看