創(chuàng)建對(duì)象一般有3中方式:1.構(gòu)造器創(chuàng)建。2.靜態(tài)工廠創(chuàng)建。3.實(shí)例工廠創(chuàng)建。 多數(shù)情況下,容器會(huì)根據(jù)對(duì)象定義中的type屬性值去直接調(diào)用響應(yīng)類型的某個(gè)構(gòu)造器。另外,容器也可以調(diào)用工廠方法來創(chuàng)建對(duì)象,這時(shí)type屬性的值就應(yīng)該是包含工廠方法的類型(注:而不是要?jiǎng)?chuàng)建的類型,但通過該對(duì)象定義的名稱獲取的是由工廠方法所創(chuàng)建的對(duì)象)。工廠方法的產(chǎn)生對(duì)象可以是工廠方法所在的類型,也可以是其他類型(注:很多情況下工廠方法位于單獨(dú)的類型中),這無關(guān)緊要。 一、通過構(gòu)造器創(chuàng)建對(duì)象、 通過構(gòu)造器創(chuàng)建隊(duì)形需要滿足這幾個(gè)條件:1.指明對(duì)象類型type=”類全名,程序集名” 2.有一個(gè)無參的構(gòu)造函數(shù)或者默認(rèn)構(gòu)造函數(shù)。 <object id="PersonDao" type="Dao.PersonDao, Dao">
static void CreateByConstructor() string[] XMLFiles = new string[] "assembly://CreateObjects/CreateObjects/Objects.xml" IApplicationContext context = new XmlApplicationContext(XMLFiles); IObjectFactory factory = (IObjectFactory)context; Console.Write(factory.GetObject("PersonDao").ToString());
嵌套類型對(duì)象的創(chuàng)建需要“+”號(hào)來連接被嵌套的類型。如果在PersonDao中嵌套了類型Person <object id="Person" type="Dao.PersonDao+Person, Dao">
static void CreateNested() string[] XMLFiles = new string[] "assembly://CreateObjects/CreateObjects/Objects.xml" IApplicationContext context = new XmlApplicationContext(XMLFiles); IObjectFactory factory = (IObjectFactory)context; Console.Write(factory.GetObject("Person").ToString());
二、靜態(tài)工廠創(chuàng)建 使用靜態(tài)工廠創(chuàng)建對(duì)象需要配置factory-mothod屬性 <object id="StaticObjectsFactory" type="DaoFactory.DataAccess, DaoFactory" factory-method="CreatePersonDao">
static void CreateByStaticFactory() string[] XMLFiles = new string[] "assembly://CreateObjects/CreateObjects/Objects.xml" IApplicationContext context = new XmlApplicationContext(XMLFiles); IObjectFactory factory = (IObjectFactory)context; Console.Write(factory.GetObject("StaticObjectsFactory").ToString());
三、使用實(shí)例工廠創(chuàng)建對(duì)象 使用實(shí)例工廠創(chuàng)建隊(duì)形需要先定義一個(gè)工廠,然后設(shè)factory-object和factory-method屬性,且滿足實(shí)例工廠方法所在的對(duì)象必須也要配置在同一容器(或父容器)中 和 對(duì)象定義就不能包含type屬性 <object id="instanceObjectsFactory" type="DaoFactory.DataAccess, DaoFactory"> <!--創(chuàng)建的對(duì)象--> <object id="instancePersonDao" factory-method="CreateInstance" factory-object="instanceObjectsFactory">
static void CreateByInstanceFactory() string[] xmlFiles = new string[] "assembly://CreateObjects/CreateObjects/Objects.xml" IApplicationContext context = new XmlApplicationContext(xmlFiles); IObjectFactory factory = (IObjectFactory)context; Console.WriteLine(factory.GetObject("instancePersonDao").ToString());
四、泛型類型的創(chuàng)建 泛型類型的創(chuàng)建比較類型于以上幾種創(chuàng)建,可以有通過構(gòu)造器創(chuàng)建,還可以通過靜態(tài)或者工廠創(chuàng)建,但是設(shè)置type屬性的時(shí)候要注意:左尖括號(hào)<要替換成字符串”<”,因?yàn)樵赬ML中左尖括號(hào)會(huì)被認(rèn)為是小于號(hào)。 <object id="genericClass" type="Dao.GenericClass<int>, Dao" >
static void CreateByGenericClass() string[] xmlFiles = new string[] "assembly://CreateObjects/CreateObjects/Objects.xml" IApplicationContext context = new XmlApplicationContext(xmlFiles); IObjectFactory factory = (IObjectFactory)context; Console.WriteLine(factory.GetObject("genericClass").ToString());
代碼連接:https://download.csdn.net/download/wjgwrr/10429544
|