Spring.NET学习笔记3——实现一个简易的IoC框架(练习篇)
2011-04-08 13:30
791 查看
讲了这么多理论,我们来手动实现一个简易的IoC框架的,这样可以加深IoC的理论知识。
一、思路
在我们使用Spring.NET框架的时候,首先需要实例化Spring.NET容器, 然后调用IoC容器IObjectFactory接口中GetObject方法获取容器中的对象。通过这一点就可以告诉我们制作IoC容器需要写一个获取XML文件内容的方法和申明一个Dictionary<string, object>来存放IoC容器中的对象,还需要写一个能从Dictionary<string, object>中获取对象的方法。
二、分析
要获取XML文件的内容,在3.5的语法中,我自然而然想到了Linq To XML。需要实例XML中配置的对象,我们想到了使用反射技术来获取对象的实例。
三、代码实现
1.xml工厂
2.调用
好了,一个简易的IoC框架就基本实现了。
代码下载
一、思路
在我们使用Spring.NET框架的时候,首先需要实例化Spring.NET容器, 然后调用IoC容器IObjectFactory接口中GetObject方法获取容器中的对象。通过这一点就可以告诉我们制作IoC容器需要写一个获取XML文件内容的方法和申明一个Dictionary<string, object>来存放IoC容器中的对象,还需要写一个能从Dictionary<string, object>中获取对象的方法。
二、分析
要获取XML文件的内容,在3.5的语法中,我自然而然想到了Linq To XML。需要实例XML中配置的对象,我们想到了使用反射技术来获取对象的实例。
三、代码实现
1.xml工厂
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.Linq; using System.Reflection; namespace MyselfIoC { public class MyXmlFactory { private IDictionary<string, object> objectDefine = new Dictionary<string, object>(); public MyXmlFactory(string fileName) { InstanceObjects(fileName); // 实例IoC容器 } /// <summary> /// 实例IoC容器 /// </summary> /// <param name="fileName"></param> private void InstanceObjects(string fileName) { XElement root = XElement.Load(fileName); var objects = from obj in root.Elements("object") select obj; objectDefine = objects.ToDictionary( k => k.Attribute("id").Value, v => { string typeName = v.Attribute("type").Value; Type type = Type.GetType(typeName); return Activator.CreateInstance(type); } ); } /// <summary> /// 获取对象 /// </summary> /// <param name="id"></param> /// <returns></returns> public object GetObject(string id) { object result = null; if (objectDefine.ContainsKey(id)) { result = objectDefine[id]; } return result; } } }
2.调用
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MyselfIoC { class Program { static void Main(string[] args) { AppRegistry(); Console.ReadLine(); } static void AppRegistry() { MyXmlFactory ctx = new MyXmlFactory(@"D:/Objects.xml"); Console.WriteLine(ctx.GetObject("PersonDao").ToString()); } } }
好了,一个简易的IoC框架就基本实现了。
代码下载
相关文章推荐
- Spring.NET学习笔记3——实现一个简易的IoC框架(练习篇) Level 100
- Spring.NET学习笔记3——实现一个简易的IoC框架(练习篇)
- Spring.NET学习笔记3——实现一个简易的IoC框架(练习篇)
- Spring.NET学习笔记3——实现一个简易的IoC框架(练习篇) Level 100
- Spring.NET学习笔记3——实现一个简易的IoC框架(练习篇) Level 100
- Spring.NET学习笔记3——实现一个简易的IoC框架(练习篇) Level 100
- 实现一个简易的IoC框架(上)(此篇与Spring.NET无关,为自己手写IoC框架)
- Spring.NET学习笔记3——实现一个简易的IoC框架(练习篇)(转)
- 实现一个简易的IoC框架(上)(此篇与Spring.NET无关,为自己手写IoC框架)
- DirectX11 With Windows SDK--13 动手实现一个简易Effects框架、阴影效果绘制
- 自己实现一个IOC框架
- Spring.NET学习笔记9——打造简易的依赖注入框架(练习篇)
- 【Android进阶】如何写一个很屌的动画(1)---先实现一个简易的自定义动画框架
- Spring.NET学习笔记9——打造简易的依赖注入框架(练习篇) (转)
- Spring.NET学习笔记9——打造简易的依赖注入框架(练习篇) Level 100
- RPC框架原理简述:从实现一个简易RPCFramework说起
- 实现一个简易IOC容器
- 自己动手写一个web框架(一):实现IOC与MVC
- Spring.NET学习笔记9——打造简易的依赖注入框架(练习篇) Level 100
- 自己实现的一个简易Spring框架(IoC+AOP)