多數情況下,容器會根據對象定義中的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類
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中文手冊)
<!-- factory order instance-->
<object id="OrderFactorySample" type="IocTest.Entities.OrderFactory">
<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());
(四) 泛型類型
與普通對象相同。但要注意的是左尖括号要以<來代替,右尖括号不用。
Score<T> 類
public class Score<T>
public List<T> ScoreList { get; set; }
string strReturn = string.Empty;
foreach (T t in ScoreList)
strReturn += t.ToString();
return strReturn;
<!--generic test-->
<object id="Score" type="IocTest.Entities.Score<int>">
[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());
轉載請注明:部落格園。
部落格園大道至簡
http://www.cnblogs.com/jams742003/轉載請注明:部落格園