实现一个简单的IOC框架
最近在spring.net框架,首篇学习了IOC/DI。通过简单的学习,我们是从配置xml文件中,添加<object>节点,然后创建容器,再创建容器对象。所以,实现一个ioc,一。需要读取配置文件xml中的节点对象 二。通过反射,将ioc对象,保存到一个字典中。
IOC/DI:反转了以往web程序创建所需对象及对象依赖,而是通过容器对象创建对象,并查找或创建容器对象所需依赖,并注入对象中。让容器控制了外部资源的获取。
<?xml version="1.0" encoding="utf-8" ?> <objects> <object name="myIoc" type="SimpleIOC.model.Customer,SimpleIOC"></object> </objects>
一。创建XML工厂类,加载xml文件,读取文件。并反射,维护容器对象到字典表中。
public class MyXmlFactory { //声明字典对象保存IOC容器对象 private Dictionary<string, object> xmlObject = new Dictionary<string, object>(); public MyXmlFactory(string fileName) { //创建ioc容器 InstanceObject(fileName); } public void InstanceObject(string fileName) { XElement rootXml = XElement.Load(fileName);//从xml文件中加载xml元素 //使用linq to xml 获取xml文件中的配置对象 var objects = from obj in rootXml.Elements("object") select obj; xmlObject = objects.ToDictionary(k => k.Attribute("name").Value, v => { string typeName = v.Attribute("type").Value; Type type = Type.GetType(typeName);//通过反射获取指定类型名称名称 return Activator.CreateInstance(type);//通过类型名称,创建容器对象 }); } /// <summary> /// 通过key值,从容器对象字典中获取对象 /// </summary> /// <param name="id"></param> /// <returns></returns> public object GetObject(string id) { object result = null; xmlObject.TryGetValue(id, out result); return result; } }
二。调用xml工厂,获取容器创建对象
1 public static void Main(string[] args) 2 { 3 MyXmlFactory factory = new MyXmlFactory(@"F:\StudyCode\SpringIOC\手搭IOC框架\SimpleIOC\XML\ioc.xml"); 4 //Customer customer = (Customer)factory.GetObject("myIoc"); 5 Console.WriteLine(factory.GetObject("myIoc").ToString()); 6 Console.ReadKey(); 7 }
生命需要感动和奇迹。成功不易,放弃简单。每次感觉走不下去的时候,就是通往成功的节点。努力吧,奋斗吧,即使不被全世界看好。至少,也要做个坏孩子啊