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
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SpringNetCollectionDI { 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"/> <!-- <resource uri="~/../../config.xml"/> <resource uri="file:///config.xml"/> --> <resource uri="file://config.xml"/> </context> <objects xmlns="http://www.springframework.net" /> </spring> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> </startup> </configuration>
config.xml
<?xml version="1.0" encoding="utf-8" ?> <objects xmlns="http://www.springframework.net"> <object id="person" type="SpringNetCollectionDI.Person, SpringNetCollectionDI"> <!--空集合属性--> <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="SpringNetCollectionDI.OneYear,SpringNetCollectionDI"/> <object id="happy" type="SpringNetCollectionDI.Happy,SpringNetCollectionDI"/> </objects>
Program
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Spring.Context; using Spring.Context.Support; namespace SpringNetCollectionDI { 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(); } } }