Spring.NET还支持集合类型的注入。而且使用起来也比较方便。

  一、ILIst类型
  使用<list>元素作为ILIst的标签,value为集合中元素的值。也可以注入对象,甚至关联其它对象,使用 <ref/>元素表示关联的对象,object 属性为所关联对象的id或name。集合可以为空,用<null/>元素来标记。

  在<list>元素中设置 element-type 属性表示泛型T的类型,例如 element-type="int"  ,代表int型。

  

  二、IDictionary类型

  使用<dictionary>元素来表示IDictionary接口的实现类型。<entry/>表示IDictionary集合的元素。key和value属性为元素的键值队,value-ref为关联的元素。

  同理,<dictionary>元素的key-type和value-type属性来表示泛型IDictionary,例如 <dictionary key-type="string" value-type="object"> 。

  完整代码如下:

Domain
    public class Happy
    {
        public override string ToString()
        {
            return "每天都开心,每天都有好心情";
        }
    }

    public class OneYear
    {
        public override string ToString()
        {
            return "快乐的一年";
        }
    }

    public class Person
    {
        public IList<Person> BestFriends { get; set; }

        public IList HappyYears { get; set; }

        public IList<int> Years { get; set; }

        public IDictionary HappyDic { get; set; }

        public IDictionary<string,object> HappyTimes { get; set; }
    }
App.config
<?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">

<object id="person" type="SpringNetDi.Person, SpringNetDi">

<!--空集合属性-->
        <property name="BestFriends">
          <null/>
        </property>
        
        <!--System.Collections.IList注入 -->
        <property name="HappyYears">
          <list>
            <value>1992</value>
            <value>1998 年</value>
            <ref object="oneYear"/>
          </list>
        </property>

<!--System.Collections.IList<int>注入 -->
        <property name="Years">
          <list element-type="int">
            <value>1992</value>
            <value>1998</value>
            <value>2000</value>
          </list>
        </property>

<!--System.Collections.IDictionary注入-->
        <property name="HappyDic">
          <dictionary key-type="string" value-type="object">
            <entry key="第一开心" value="每天都能睡一个好觉"/>
            <entry key="第二开心" value-ref="happy"/>
          </dictionary>
        </property>

<!--System.Collections.IDictionary<object,object>注入-->
        <property name="HappyTimes">
          <dictionary key-type="string" value-type="object">
            <entry key="第一开心" value="每天都能睡一个好觉"/>
            <entry key="第二开心" value-ref="happy"/>
          </dictionary>
        </property>
        
      </object>

<object id="oneYear" type="SpringNetDi.OneYear,SpringNetDi"/>

<object id="happy" type="SpringNetDi.Happy,SpringNetDi"/>
      
    </objects>

</spring>

</configuration>

Program
class Program
    {
        static void Main(string[] args)
        {
            IApplicationContext ctx = ContextRegistry.GetContext();

            Person person = ctx.GetObject("person") as Person;

            Console.WriteLine("空值");
            string bestFriend = person.BestFriends == null ? "我的朋友太多了" : "我只有一个好朋友";
            Console.WriteLine(bestFriend);
            Console.WriteLine();

            Console.WriteLine("IList");
            foreach (var item in person.HappyYears)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine();

            Console.WriteLine("泛型Ilist<int>");
            foreach (int item in person.Years)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine();

            Console.WriteLine("IDictionary");
            foreach (DictionaryEntry item in person.HappyDic)
            {
                Console.WriteLine(item.Key + " 是 " + item.Value);
            }
            Console.WriteLine();

            Console.WriteLine("泛型IDictionary<string,object>");
            foreach (KeyValuePair<string,object> item in person.HappyTimes)
            {
                Console.WriteLine(item.Key + " 是 " + item.Value);
            } 

            Console.ReadLine();
        }
    }

  输入结果如下:

代码下载

  返回目录

Spring.NET学习笔记8——集合类型的注入(基础篇) Level 200相关推荐

  1. Spring.NET学习笔记8——集合类型的注入(基础篇) Level 200

    Spring.NET还支持集合类型的注入.而且使用起来也比较方便. 一.ILIst类型 使用<list>元素作为ILIst的标签,value为集合中元素的值.也可以注入对象,甚至关联其它对 ...

  2. Spring.NET学习笔记10——方法的注入(基础篇) Level 200

    多数用户都会将容器中的大部分对象布署为singleton模式.当一个singleton对象需要和另一个singleton对象协作,或者一个非singleton对象需要和另一个非singleson对象协 ...

  3. Spring框架中提取list集合类型属性注入

    提取list集合类型属性注入 前言 引入名称空间 编写`xml`配置文件 运行结果 前言 对于某一个类型属性通用性较高的情况下,可以单独的提取出来,给需要的bean进行引用. 有关类的创建见<S ...

  4. Spring.NET学习笔记15——AOP的配置(基础篇) Level 200

    上篇我学习了Spring.NET的四种通知类型,AOP的实现方案比较复杂,是通过代码实现的.而Spring.NET框架给我们提供了配置的方式来实现AOP的功能.到目前为止,我们已经讨论过使用Proxy ...

  5. Python3《机器学习实战》学习笔记(二):决策树基础篇之让我们从相亲说起

    转载请注明作者和出处: http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 个人网 ...

  6. web安全学习笔记--sql语句(sql注入基础上)

    一.基础知和表内操作语法 1.sql语句对大小写不敏感!!! SELECT - 从数据库表中获取数据:select * from (columns/tables/databases); UPDATE ...

  7. Spring.NET学习笔记13——AOP的概念(基础篇) Level 200

    上篇我们简单的了解了AOP的应用场景,知道AOP编程的重要性.这篇我们先看一段代码,来开始今天的学习. 回顾与上篇类似的代码:SecurityService类的IsPass判断用户名为"ad ...

  8. Spring.NET学习笔记1——控制反转(基础篇) Level 200

    在学习Spring.NET这个控制反转(IoC)和面向切面(AOP)的容器框架之前,我们先来看一下什么是控制反转(IoC). 控制反转(Inversion of Control,英文缩写为IoC),也 ...

  9. Spring.NET学习笔记11——自定义对象行为(基础篇) Level 200

    Spring.NET通过几个专门的接口来控制容器中对象的行为.说到对象的行为无非就要提到对象的生命周期控制.类似在WinForm开发,Form生命周期中,Load方法为Form的载入方法和Dispos ...

  10. python学习笔记六 初识面向对象上(基础篇)

    python面向对象 面向对象编程(Object-Oriented Programming )介绍 对于编程语言的初学者来讲,OOP不是一个很容易理解的编程方式,虽然大家都知道OOP的三大特性是继承. ...

最新文章

  1. 盈客在线陈清平:数据驱动让传统餐饮业焕发新活力
  2. OSPF中DR和BDR作用简述
  3. springboot 直接转发调用_springboot-过滤器的页面跳转【重定向与请求转发】-异常报错...
  4. C语言“fread”函数的用法?
  5. <load-on-startup>1</load-on-startup>的作用
  6. 克服协作的五种障碍_如何克服社区管理的障碍
  7. Python JavaScript 的数组去重
  8. 存储产业进入闪存时代
  9. 20170708xlVBA添加新产品修改公式
  10. 微信小程序 - 贝塞尔曲线(购物车效果)
  11. TensorFlow进阶:CNN对CIFAR10图像分类
  12. 计算机网络 CDN技术介绍
  13. poj 2825 蜜汁构造
  14. qt小闹钟 完整程序_Qt实现闹钟小程序
  15. 计算机比赛小组名称和口号,竞赛小组队名和口号
  16. 手游无限多开器安卓版_手游多开器安卓版-手游多开器手机版 _5577安卓网
  17. Metaq的一些简单机制
  18. 外国程序员整理的Java资料大全
  19. 【100%通过率】华为OD机试真题 C++ 实现【简单的自动曝光】【2022.11 Q4 新题】
  20. ISP概述、工作原理及架构

热门文章

  1. setinterval 和 ajax,JavaScriptsetInterval和“this”解决方案
  2. python设计题60元按商品的比例平分_团体程序设计天梯赛-练习集(5分题集)Python 3...
  3. docker基础1--下载制定docker镜像的两种方法:
  4. c语言修改内存字节,要开学了,小白给大家一个C语言修改dnf内存的示范代码
  5. 在java中如何定义一个方法,个人编程学习网 - Java-方法中的术语和如何定义方法...
  6. 32位crc校验码程序_基于FPGA的CRC校验码生成器设计
  7. nginx反向代理负载均衡简述
  8. linux 打包 压缩
  9. 浅析 @PathVariable 和 @RequestParam(转发,非原创)
  10. 技术干货 | SDN controller高可用之路