本文接下来要阐述的是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 : IPersonDao16 {17 public void Save()18 {19 Console.WriteLine("保存 Person1");20 }21 }22 }
配置文件还是跟以前一样:
12 3 An example that demonstrates simple IoC features. 4 5 7
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 StaticObjectsFactory2 {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());
第三:使用实例工厂创建对象
使用实例工厂创建对象需要先定义一个工厂,然后设置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 }
12 3 7An example that demonstrates simple IoC features. 4 5 6
调用:
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 Pig2 { 3 public void Save() 4 { 5 Console.WriteLine(1); 6 } 7 } 8 9 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属性的时候要注意:左尖括号<要替换成字符串“<”,因为在XML中左尖括号会被认为是小于号。