学过了前面的课程,我们来一起学习Spring.NET的IoC容器对象的创建。
创建对象一般有3种方式:1.构造器创建,2.静态工厂创建,3.实例工厂创建
多数情况下,容器会根据对象定义中的type属性值去直接调用相应类型的某个构造器。另外,容器也可以调用工厂方法来创建对象,这时type属性的值就应该是包含工厂方法的类型(按:而不是要创建的类型,但通过该对象定义的名称获取的则是由工厂方法所创建的对象)。工厂方法的产品对象可以是工厂方法所在的类型,也可以是其它类型(按:很多情况下工厂方法位于单独的类型中),这无关紧要。(摘自Spring.NET中文手册)
一、通过构造器创建对象
通过构造器创建对象需要满足这几个条件:1.指明对象类型type="类全名,程序集名"(<object id="personDao" type="CreateObjects.PersonDao, CreateObjects" />),也可以使用强命名type="System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089"。2.有一个无参的构造函数或者默认构造函数(依赖注入的时候需要外部可以调用的构造函数,如pubilc修饰的,构造函数可以带参数)。
- <!--构造器-->
- <object id="personDao" type="CreateObjects.PersonDao, CreateObjects" />
复制代码
CreateByConstructor
- /// <summary>
- /// 构造器创建
- /// </summary>
- static void CreateByConstructor()
- {
- string[] xmlFiles = new string[]
- {
- "assembly://CreateObjects/CreateObjects/Objects.xml"
- };
- IApplicationContext context = new XmlApplicationContext(xmlFiles);
-
- IObjectFactory factory = (IObjectFactory)context;
- Console.WriteLine(factory.GetObject("personDao").ToString());
- }
复制代码
嵌套类型对象的创建需要用“+”号来连接被嵌套的类型。如果在PersonDao中嵌套了类型Person
- <!--嵌套类型-->
- <object id="person" type="CreateObjects.PersonDao+Person, CreateObjects" />
复制代码
CreateNested
- /**//// <summary>
- /// 嵌套类型创建
- /// </summary>
- static void CreateNested()
- {
- string[] xmlFiles = new string[]
- {
- "assembly://CreateObjects/CreateObjects/Objects.xml"
- };
- IApplicationContext context = new XmlApplicationContext(xmlFiles);
-
- IObjectFactory factory = (IObjectFactory)context;
- Console.WriteLine(factory.GetObject("person").ToString());
- }
复制代码
二、静态工厂创建
使用静态工厂创建对象需要配置factory-method属性
- <!--静态工厂-->
- <object id="staticObjectsFactory" type="CreateObjects.StaticObjectsFactory, CreateObjects" factory-method="CreateInstance"/>
复制代码
CreateByStaticFactory
- /**//// <summary>
- /// 静态工厂创建
- /// </summary>
- static void CreateByStaticFactory()
- {
- string[] xmlFiles = new string[]
- {
- "assembly://CreateObjects/CreateObjects/Objects.xml"
- };
- IApplicationContext context = new XmlApplicationContext(xmlFiles);
-
- IObjectFactory factory = (IObjectFactory)context;
- Console.WriteLine(factory.GetObject("staticObjectsFactory").ToString());
- }
复制代码
三、使用实例工厂创建对象使用实例工厂创建对象需要先定义一个工厂,然后设置factory-object和factory-method属性,且满足 实例工厂方法所在的对象必须也要配置在同一容器(或父容器)中 和 对象定义就不能包含type属性 instanceObjectsFactory
- <!-- 实例工厂 -->
- <object id="instanceObjectsFactory" type="CreateObjects.InstanceObjectsFactory, CreateObjects" /><!--工厂-->
- <object id="instancePersonDao" factory-method="CreateInstance" factory-object="instanceObjectsFactory" /> <!--创建的对象-->
复制代码
CreateByInstanceFactory
- /**//// <summary>
- /// 实例工厂创建
- /// </summary>
- 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());
- }
复制代码
四、泛型类型的创建泛型类型的创建比较类型于以上几种创建方式,可以有通过构造器创建,还可以通过静态或者实例工厂创建。但是设置type属性的时候要注意:左尖括号<要替换成字符串“<”,因为在XML中左尖括号会被认为是小于号。
- <!-- 泛型类型 GenericClass<int> -->
- <object id="genericClass" type="CreateObjects.GenericClass<int>, CreateObjects" />
复制代码
CreateGenericClass
- /**//// <summary>
- /// 创建泛型
- /// </summary>
- static void CreateGenericClass()
- {
- string[] xmlFiles = new string[]
- {
- "assembly://CreateObjects/CreateObjects/Objects.xml"
- };
- IApplicationContext context = new XmlApplicationContext(xmlFiles);
-
- IObjectFactory factory = (IObjectFactory)context;
-
- object obj = factory.GetObject("genericClass");
-
- Console.WriteLine(obj.ToString());
- }
复制代码
以上就是对象创建的几种方式。
|
<!-- google_ad_section_end -->
分享到:
相关推荐
刘冬编写Spring.NET学习笔记25——整合Quartz.NET例子。 原文: http://www.cnblogs.com/GoodHelper/archive/2009/11/20/SpringNet_QuartzNet.html
Spring.NET学习笔记22——整合WCF(应用篇) http://www.cnblogs.com/GoodHelper/archive/2010/05/15/SpringNet_Wcf.html
刘冬编写的Spring.NET学习笔记21——整合WebService的例子。 原文:http://www.cnblogs.com/GoodHelper/archive/2009/11/19/SpringNet_WebService.html
刘冬编写的Spring.NET学习笔记26——整合NVelocity例子。 原文:http://www.cnblogs.com/GoodHelper/archive/2009/11/20/SpringNet_NVelocity.html
刘冬编写Spring.NET学习笔记20——整合Remoting(应用篇)的例子 原文:http://www.cnblogs.com/GoodHelper/archive/2009/11/19/SpringNet_Remoting.html
刘冬编写的Spring.NET整合NHibernate例子 原文:http://www.cnblogs.com/GoodHelper/archive/2009/11/18/SpringNet_NHibernate.html
Spring.NET事务配置模板。 原文出处:http://www.cnblogs.com/GoodHelper/archive/2009/11/16/SpringNet_Transaction.html
刘冬编写的Spring.NET,NHibernate,ASP.NET MVC例子 原文:http://www.cnblogs.com/GoodHelper/archive/2009/11/19/SpringNet_Nhibernate_AspNetMvc.html
Spring.NET事务管理机制 原文:http://www.cnblogs.com/GoodHelper/archive/2009/11/16/SpringNet_Transaction.html
Spring.NET实用技巧4——NHibernate分布式事务(下) 博客出处:http://www.cnblogs.com/GoodHelper/archive/2010/07/30/SpringNetDistributedTransaction2.html
创建对象一般有3种方式:1.构造器创建,2.静态工厂创建,3.实例工厂创建 多数情况下,容器会根据对象定义中的type属性值去直接调用相应类型的某个构造器。另外,容器 也可以调用工厂方法来创建对象,这时type属性...
Spring.NET实用技巧3——NHibernate分布式事务(上) 博客出处: http://www.cnblogs.com/GoodHelper/archive/2010/07/29/SpringNetDistributedTransaction1.html
Spring.NET学习笔记 - 刘冬.NET - 博客园
Spring.NET实用技巧1——基于Prevalence下的NHibernate二级缓存使用技巧 文章出处 http://www.cnblogs.com/GoodHelper/archive/2010/05/19/SpringNet_NHbernate_Prevalence.html
Spring.NET实用技巧5——WCF环境下的NHibernate分布式事务 。 博客园出处:http://www.cnblogs.com/GoodHelper/archive/2010/08/04/SpringNetWcfDistributedTransaction.html
spring.net学习笔记,一步一步教你学习spring.net
Spring.Net教程(4)对象的创建代码,创建对象一般有3中方式:1.构造器创建。2.静态工厂创建。3.实例工厂创建。
Spring.NET学习笔记:资源有源代码程序及文档说明,基础篇、应用篇、扩展集成、企业架构体系实战等;基础篇包括:控制反转,环境搭建,实现简易IOC框架,对象的创建,容器中对象作用域,依赖注入,依赖对象的注入,...
博客出处: http://www.cnblogs.com/GoodHelper/archive/2010/05/25/SpringNet_NHibernate_Config.html
在我们使用Spring.NET框架的时候,首先需要实例化Spring.NET容器, 然后调用IoC容器IObjectFactory接口中GetObject方法获取容器中的对象。通过这一点就可以告诉我们制作IoC容器需要写一个获取XML文件内容的方法和申明...