学习QFramework 过程中发现对IOC不太了解,就大概百度了一下思路

 将原先类与类之间的相互依赖关系,转移到第三方容器中,

同过读取配置文件来生成对应的依赖关系,将原本类之间的耦合转移到配置文件中。

  这是我大概的一个理解,欢迎大家斧正。

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Xml.Linq;
using UnityEngine; public class Test : MonoBehaviour
{
object user = new object();
private void Start()
{
var container = IoCContainer.GetContainer(); User userIoc = container[" "] as User;
userIoc.Say();
}
} public class User
{
public void Say()
{
Debug.Log(" 抱树");
}
} public class IoCContainer
{
private static Dictionary<string, object> container = new Dictionary<string, object>(); public static Dictionary<string, object> GetContainer()
{
LoadContainer();
return container;
} /// <summary>
/// 加载填充容器
/// </summary>
private static void LoadContainer()
{
//获取项目的根目录的绝对路径 ,
//因为测试时应用生成在'根目录/bin/Debug' 所以需要向上走两个目录
string rootPath = Path.GetFullPath(AppDomain.CurrentDomain.BaseDirectory + @"..\..\");
// 加载config文件
XElement xElement = XElement.Load(rootPath + "App.config");
//获取myobjects节点下的子集合
IEnumerable<XElement> items = xElement.Descendants("myobjects").Elements();
//循环实例化节点
foreach (var item in items)
{
//通过反射加载程序集
var assembly = Assembly.LoadFrom(item.Attribute("assembly").Value);
//创建实例
var entity = assembly.CreateInstance(item.Attribute("type").Value);
//添加到容器中
container.Add(item.Attribute("name").Value, entity);
} }
}

最新文章

  1. C#设计模式系列:访问者模式(Visitor)
  2. 示例开发过程记录:meteor,react,apollo
  3. qt开源社区学习
  4. React Developer Tools 安装小提示
  5. FileUpload上传图片直接浏览显示(没有上传按钮如何上传)
  6. .net平台下深拷贝和浅拷贝
  7. Activity之间使用intent传递大量数据带来问题总结
  8. While reading xxx.png pngcrush caught libpng error: Not a PNG file..
  9. 窗体位置设置StartPosition属性
  10. 关于EF中ApplyCurrentValues和ApplyOriginalValues区别
  11. underscorejs-size学习
  12. LeetCode_Jump Game II
  13. sctf pwn300
  14. Java入门篇(三)——Java流程控制
  15. python模块--zipfile文件压缩
  16. 聊聊ReentrantLock的内部实现
  17. 【题解】Luogu P2572 [SCOI2010]序列操作
  18. pycharm的放大和缩小字体的显示 和ubunt的截圖工具使用 ubuntu上安装qq微信等工具
  19. Postgresql查询表的大小
  20. R语言中 fitted()和predict()的区别

热门文章

  1. 086_Service Cloud
  2. springmvc引入swagger2
  3. 微服务笔记之Euraka(2)
  4. vue3项目在页面退出时弹窗确认--用vant组件Dialog弹窗在路由改变的时候不生效问题
  5. Codeforces Round #827 (Div. 4) 复盘+题解
  6. DOS命令操作
  7. Delphi中Stringlist的自定义排序(将函数地址做为参数)
  8. go 处理json
  9. ES6-Promise下
  10. 利用pandas+pyecharts制作可视化图表