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 />
      
    </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教程(七)——集合类型的注入(基础篇)

相关文章: