Spring.NET学习笔记3——实现一个简易的IoC框架(练习篇)
讲了这么多理论,我们来手动实现一个简易的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工厂
MyXmlFactory
- 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.调用
Program
- 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2008-03-26 c# 二分查找
2008-03-26 几种字符串反转方法效率比较
2008-03-26 C#反转字符串效率最高的方法