看了不少IOC的文章。简单概念梳理下。


1.依赖,依赖倒置,控制反转(IOC),依赖注入

解释是仿照http://www.cnblogs.com/qqlin/archive/2012/10/09/2707075.html的例子。

依赖:类和类之间的联系。例如播放器类依赖媒体文件类

依赖倒置:本来是A类依赖B类。现在创建IB接口类。让A和B不再互相依赖,A类只知道自己需要调用IB接口的类。例如实现媒体文件接口类。好处在于下次再有新的媒体文件, 播放器类不用重构。

控制反转:本来A类要调用B类就需要创建B类实例,A类要调用C类就需要创建C类实例,而现在具体是调用哪个实例是由配置控制。例如:创建媒体文件类的工作不再由播放器类来完成。Main方法配置去控制是MP3文件还是默认文件。

依赖注入:当创建调用者的时候,IOC容器会向调用注入被调用的实例,因此也称为依赖注入。例如IOC的构造函数注入

下面贴下代码:方便以后回忆的时候看。

  class Program{static void Main(string[] args){UnityContainer container = new UnityContainer();container.RegisterType<IPlayer, WYYPlayer>();container.RegisterType<IPlayer, DefalutPlayer>();container.RegisterType<IMediaFile, MP3MediaFile>();container.RegisterType<IMediaFile, DefaultMediaFile>();var op1 = container.Resolve<Operation>();op1.Do();//以前的调用方法//var op2 = new Operation(new 网易云Player(),new MP3MediaFile());//op2.Do();
Console.ReadKey();}}
    public class Operation{IMediaFile _mtype;IPlayer _player;public Operation(IPlayer player, IMediaFile mtype){_player = player;_mtype = mtype;}public void Do() { _player.play(_mtype); } }
    public interface IPlayer     {     void play(IMediaFile file);   }public class DefalutPlayer: IPlayer{public void play(IMediaFile file){Console.Write("默认:"+file.Name);}}public class WYYPlayer : IPlayer{public void play(IMediaFile file){Console.Write("网易云:" + file.Name);}}public interface IMediaFile{string Name { get; set; }}public class DefaultMediaFile: IMediaFile{public string Name { get; set; } = "默认文件";}public class MP3MediaFile : IMediaFile{public string Name { get; set; } = "MP3文件";}

后续:UNITY 容器注入什么就拿到什么。想做到插件式开发。还需要定制注入的规则。

  说个插件式开发流程:比如有A实现,B实现。我想要真正来做的是B的方法。

  1.反射A,B拿到AB的type。

  2.在RegisterType的时候根据具体情况注入哪个。比如数组排序,比如type优先级等

转载于:https://www.cnblogs.com/TeemoHQ/p/5941748.html

Unity IOC简单认知相关推荐

  1. Unity 制作简单的任务动画

    Unity 制作简单的任务动画 1.添加人物模型到unity 我使用的是unity store中的免费模型: https://assetstore.unity.com/packages/3d/char ...

  2. unity实现简单fps游戏功能

    unity实现简单fps游戏鼠标功能 1.unity实现瞄准镜功能 实现原理 按下鼠标右键镜头拉近,再次按下镜头拉远(设置Camrea的FOV属性) 逐渐拉近(例如:60->20逐渐拉近) 设置 ...

  3. unity实现简单巡逻兵

    unity实现简单巡逻兵 游戏视频 游戏要求 创建一个地图和若干巡逻兵(使用动画): 每个巡逻兵走一个3~5个边的凸多边型,位置数据是相对地址.即每次确定下一个目标位置,用自己当前位置为原点计算: 巡 ...

  4. unity实现简单坦克对战

    unity实现简单坦克对战 游戏要求 使用"感知-思考-行为"模型,建模 AI 坦克 场景中要放置一些障碍阻挡对手视线 坦克需要放置一个矩阵包围盒触发器,以保证 AI 坦克能使用射 ...

  5. Unity优化——简单AOI实现原理

    声明:本文为个人笔记,用于学习研究使用非商用,内容为个人研究及综合整理所得,若有违规,请联系,违规必改. Unity网络--简单AOI实现原理 文章目录 Unity网络--简单AOI实现原理 一.开发 ...

  6. ECMAScript 6简单认知(针对后端)

    ECMAScript 6简单认知 ECMAScript 6 简介 1.与JavaScript 的关系 2.与 ECMAScript 2015 的关系 ES6基本语法 1.let声明变量 2.const ...

  7. unity ui框架_用unity制作简单的太空游戏(2)-简单炮台

    多铆蒸刚,炮塔至大! 亿万星辰,亿万炮塔! 多铆蒸刚,炮塔至上! 亿万炮塔,亿万荣光! (PS:我没有咕咕咕,就是比较惨,一口气出了半个月的差,人瘦了,也黑了,心塞塞--赶紧写个文章压压惊--) 这一 ...

  8. Unity 实现简单力场效果

    Unity 实现简单力场效果 前言 效果 源码 前言 项目中要用到一个力场的效果,偶然在bilibili中找到了.记录一下. 原视频: https://www.bilibili.com/video/B ...

  9. Unity UGUI简单的音频播放+读歌词(实现类似 QQ音乐,网易云音乐歌词滚动)

    Unity UGUI简单的音频播放+读歌词(实现类似 QQ音乐,网易云音乐歌词滚动) 效果图 (demo下载地址 demo下载地址) 简单代码 /// <summary> /// 解析数据 ...

  10. 用Unity实现简单的绳子模拟(一)

    用Unity实现简单的绳子模拟(一) 说到Unity物理,一般都会想到内置的physX物理引擎.其实我们也可以用Unity的API去实现一些简单的物理算法. 本文会介绍如何从头实现一个简单的绳子模拟的 ...

最新文章

  1. 设置RabbitMQ远程ip登录
  2. 网站流量排名常用名词pv_ip_alex_uv
  3. 最全面 Nginx 入门教程 + 常用配置解析
  4. 领域驱动 开源项目_在开源领域建立职业的建议
  5. 使用VueJs开发单页面应用经验总结
  6. HDU 3732 Ahui Writes Word
  7. JAVA常用框架及漏洞
  8. Raywenderlich: 用 VFX 制作蝴蝶飞起的效果
  9. 计算机在档案管理中的作用,计算机在档案管理中的运用
  10. lightbox使用
  11. python人机交互界面设计_Python-Tkinter图形化界面设计(详细教程 )
  12. B树、B-树、B+树、B*树图文详解
  13. 实战|Python爬取字节跳动1W+招聘信息
  14. cs1 cs2计算机课程,CS1是基本级还是CS2是基本级?
  15. 自由职业者节税方案来了!
  16. 对睡眠好的东西,失眠了,就看看这些助眠好物
  17. arm-none-eabi-gcc编译、链接选项详解
  18. 用python画简单花瓣_花瓣网花瓣爬虫
  19. 关于freetype的移植和其官方demos的使用总结
  20. 《炬丰科技-半导体工艺》 碱性溶液中结晶硅的各向异性蚀刻

热门文章

  1. 20145235 《Java程序设计》第6周学习总结
  2. PInvoke在 2.0 3.0的时候正常 升级到4.0后出错。
  3. [导入]+ADO.NET读书笔记系列 一+
  4. crm2013js弹出窗口
  5. WeChat 隐私政策
  6. Java 学习 day04
  7. Android项目中JNI技术生成并调用.so动态库实现详解
  8. python爬虫:爬取医药数据库drugbank
  9. DescribingDesign Patterns 描述设计模式
  10. [转]SQL SERVER数据库开发之触发器的应用