LYWILL设计运营 - 网站运营与推广、开发技术、成功项目展示。

实例学习Spring.NET的集合类型注入

  Spring.NET还支持集合类型的注入,主要是IList类型和IDictionary类型。

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

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

  

 

  二、IDictionary类型

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

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

 

  完整代码如下:

C#代码
  1. public class Happy   
  2. {   
  3.     public override string ToString()   
  4.     {   
  5.         return "每天都开心,每天都有好心情";   
  6.     }   
  7. }   
  8.   
  9. public class Person   
  10. {   
  11.     public IList<Person> BestFriends { getset; }   
  12.   
  13.     public IList HappyYears { getset; }   
  14.   
  15.     public IList<int> Years { getset; }   
  16.   
  17.     public IDictionary HappyDic { getset; }   
  18.   
  19.     public IDictionary<string,object> HappyTimes { getset; }   
  20. }   
  21.   
  22. public class OneYear   
  23. {   
  24.     public override string ToString()   
  25.     {   
  26.         return "快乐的一年";   
  27.     }   
  28. }  
XML/HTML代码
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2. <configuration>  
  3.   
  4.   <configSections>  
  5.     <sectionGroup name="spring">  
  6.       <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core" />  
  7.       <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />  
  8.     </sectionGroup>  
  9.   </configSections>  
  10.   
  11.   <spring>  
  12.   
  13.     <context>  
  14.       <resource uri="config://spring/objects" />  
  15.     </context>  
  16.   
  17.     <objects xmlns="http://www.springframework.net">  
  18.   
  19.       <object id="person" type="SpringNetDi.Person, SpringNetDi">  
  20.   
  21.   
  22.         <!--空集合属性-->  
  23.         <property name="BestFriends">  
  24.           <null/>  
  25.         </property>  
  26.            
  27.         <!--System.Collections.IList注入 -->  
  28.         <property name="HappyYears">  
  29.           <list>  
  30.             <value>1992</value>  
  31.             <value>1998 年</value>  
  32.             <ref object="oneYear"/>  
  33.           </list>  
  34.         </property>  
  35.   
  36.         <!--System.Collections.IList<int>注入 -->  
  37.         <property name="Years">  
  38.           <list element-type="int">  
  39.             <value>1992</value>  
  40.             <value>1998</value>  
  41.             <value>2000</value>  
  42.           </list>  
  43.         </property>  
  44.   
  45.         <!--System.Collections.IDictionary注入-->  
  46.         <property name="HappyDic">  
  47.           <dictionary key-type="string" value-type="object">  
  48.             <entry key="第一开心" value="每天都能睡一个好觉"/>  
  49.             <entry key="第二开心" value-ref="happy"/>  
  50.           </dictionary>  
  51.         </property>  
  52.   
  53.         <!--System.Collections.IDictionary<object,object>注入-->  
  54.         <property name="HappyTimes">  
  55.           <dictionary key-type="string" value-type="object">  
  56.             <entry key="第一开心" value="每天都能睡一个好觉"/>  
  57.             <entry key="第二开心" value-ref="happy"/>  
  58.           </dictionary>  
  59.         </property>  
  60.            
  61.       </object>  
  62.   
  63.       <object id="oneYear" type="SpringNetDi.OneYear,SpringNetDi"/>  
  64.   
  65.       <object id="happy" type="SpringNetDi.Happy,SpringNetDi"/>  
  66.          
  67.     </objects>  
  68.   
  69.   </spring>  
  70.   
  71. </configuration>  
C#代码
  1. class Program   
  2. {   
  3.     static void Main(string[] args)   
  4.     {   
  5.         IApplicationContext ctx = ContextRegistry.GetContext();   
  6.   
  7.         Person person = ctx.GetObject("person"as Person;   
  8.   
  9.         Console.WriteLine("空值");   
  10.         string bestFriend = person.BestFriends == null ? "我的朋友太多了" : "我只有一个好朋友";   
  11.         Console.WriteLine(bestFriend);   
  12.         Console.WriteLine();   
  13.   
  14.         Console.WriteLine("IList");   
  15.         foreach (var item in person.HappyYears)   
  16.         {   
  17.             Console.WriteLine(item);   
  18.         }   
  19.         Console.WriteLine();   
  20.   
  21.         Console.WriteLine("泛型Ilist<int>");   
  22.         foreach (int item in person.Years)   
  23.         {   
  24.             Console.WriteLine(item);   
  25.         }   
  26.         Console.WriteLine();   
  27.   
  28.         Console.WriteLine("IDictionary");   
  29.         foreach (DictionaryEntry item in person.HappyDic)   
  30.         {   
  31.             Console.WriteLine(item.Key + " 是 " + item.Value);   
  32.         }   
  33.         Console.WriteLine();   
  34.   
  35.         Console.WriteLine("泛型IDictionary<string,object>");   
  36.         foreach (KeyValuePair<string,object> item in person.HappyTimes)   
  37.         {   
  38.             Console.WriteLine(item.Key + " 是 " + item.Value);   
  39.         }    
  40.   
  41.         Console.ReadLine();   
  42.     }   
  43. }  

  输出结果如下: