zoukankan      html  css  js  c++  java
  • Unity IOC简单认知

    看了不少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优先级等

      

  • 相关阅读:
    easyui控件写法造成的错误
    外部访问服务器数据库被防火墙屏蔽报错
    云服务器Windows Server2012 配置http服务器(又称Web服务器,IIS)
    mysql五:索引原理与慢查询优化
    mysql四:数据操作
    mysql四-2:多表查询
    sql查询作业答案
    mysql四-1:单表查询
    mysql五补充部分:SQL逻辑查询语句执行顺序
    第三篇:表操作
  • 原文地址:https://www.cnblogs.com/TeemoHQ/p/5941748.html
Copyright © 2011-2022 走看看