Spring.Net学习笔记三(对象的创建)

   本文接下来要阐述的是IOC对象怎么创建,主要有3种方法:

   第一种:构造器创建(嵌套类型对象的创建需要用“+”号来连接被嵌套的类型。如果在PersonDao中嵌套了类型Person)

       类库代码:

       

 1 namespace Dao
 2 {
 3     public interface IPersonDao
 4     {
 5         void Save();
 6     }
 7     public class PersonDao : IPersonDao
 8     {
 9         public void Save()
10         {
11             Console.WriteLine("保存 Person");
12         }
13     }
14 
15     public class PersonDao1 : IPersonDao
16     {
17         public void Save()
18         {
19             Console.WriteLine("保存 Person1");
20         }
21     }
22 }

配置文件还是跟以前一样:

1  <objects xmlns="http://www.springframework.net">
2       <!--这里放容器里面的所有节点-->
3       <description>An  example that demonstrates simple IoC features.</description>
4       <!--name 必须要唯一的,type=类的全名称,所在的程序集-->
5       <object name="PersonDao" type="Dao.PersonDao1, Dao">
6       </object>
7     </objects>
1  string[] xmlFiles = new string[] 
2             {
3                 "assembly:../../../../Objects.xml"
4             };
5             IApplicationContext context = new XmlApplicationContext(xmlFiles);
6             IObjectFactory factory = (IObjectFactory)context;
7             Console.WriteLine(factory.GetObject("personDao").ToString());

不知道为什么路径是这样而不是../../这样的,望有高手看到能解决我心中疑问。

第二中:静态工厂即简单工厂创建对象

   

1   public class StaticObjectsFactory
2     {
3         public static IPersonDao CreateInstance()
4         {
5             return new PersonDao1();
6         }
7     }

 调用:

 

1  IApplicationContext context = new XmlApplicationContext(xmlFiles);
2             IObjectFactory factory = (IObjectFactory)context;
3             Console.WriteLine(factory.GetObject("staticObjectsFactory").ToString());
<object name="staticObjectsFactory" type="CreateObjects.StaticObjectsFactory, CreateObjects" factory-method="CreateInstance"/>

 

第三:使用实例工厂创建对象

        使用实例工厂创建对象需要先定义一个工厂,然后设置factory-object和factory-method属性,且满足 实例工厂方法所在的对象必须也要配置在同一容器(或父容器)中 和 对象定义就不能包含type属性

       类库代码:

       

 1  public class StaticObjectsFactory
 2     {
 3         public IPersonDao CreateInstance()
 4         {
 5             return new instanceObjectsFactory().CreateInstance();
 6         }
 7     }
 8 
 9  public class instanceObjectsFactory 
10     {
11         public IPersonDao CreateInstance()
12         {
13             return new PersonDao1();
14         }
15     }

     

1 <objects xmlns="http://www.springframework.net">
2   <!--这里放容器里面的所有节点-->
3   <description>An  example that demonstrates simple IoC features.</description>
4   <object name="staticObjectsFactory" type="Dao.StaticObjectsFactory,Dao"/>
5   <object name="instancePersonDao" factory-method="CreateInstance" factory-object="staticObjectsFactory"/>
6 </objects>
7   

调用:

 1 string[] xmlFiles = new string[] 
 2             {
 3                 "assembly:../../../../Objects.xml"
 4             };
 5             IApplicationContext context = new XmlApplicationContext(xmlFiles);
 6             IObjectFactory factory = (IObjectFactory)context;
 7             IPersonDao dao = (IPersonDao)factory.GetObject("instancePersonDao");
 8             if (dao != null)
 9             {
10                 dao.Save();
11                 Console.WriteLine("我是IoC方法");
12                 Console.ReadKey();
13             }

第四、泛型类型的创建

 1  public class Pig<T>
 2     {
 3         public void Save()
 4         {
 5             Console.WriteLine(1);
 6         }
 7     }
 8 
 9   <object id="pig" type="Dao.Pig&lt;int>, Dao"/>
10   
11    string[] xmlFiles = new string[] 
12             {
13                 "assembly:../../../../Objects.xml"
14             };
15             IApplicationContext context = new XmlApplicationContext(xmlFiles);
16             IObjectFactory factory = (IObjectFactory)context;
17             object obj = factory.GetObject("pig");
18 
19             Console.WriteLine(obj.ToString());
20             Console.ReadLine();

泛型类型的创建比较类型于以上几种创建方式,可以有通过构造器创建,还可以通过静态或者实例工厂创建。但是设置type属性的时候要注意:左尖括号<要替换成字符串“&lt;”,因为在XML中左尖括号会被认为是小于号。

     

posted @ 2015-08-05 16:53  王永华  阅读(594)  评论(0编辑  收藏  举报