打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C# IOC
  1. 啥是IOC?这货能干啥?简单不?
    IOC是Inversion of Control的缩写,CN名字叫控制反转,自我理解(我现在有的是oppo手机,有天我买了vivo。 我要玩oppo我忘放哪了,一通乱找,我要玩vivo忘放哪了,找…。记性不好,后来招个助理,这时就不用我亲自去找了,告诉助理我要玩那个就行了。)”
  2. 先来个传统的三层体验下传统方式
    结构如下

    DAL Oppo代码
using System;
using System.Collections.Generic;
using System.Text;
namespace DAL
{
   public   class Oppo
    {
        public void PlayPhone() {
            Console.Write('~hello Oppo');
        }
    }
}

BLL

using System;
using System.Collections.Generic;
using System.Text;

namespace BLL
{
 public   class PhoneBLL
    {
        public void PlayPhone() {
            DAL.Oppo oppo = new DAL.Oppo();
            oppo.PlayPhone();
        }
    }
}

控制塔输出

using System;

namespace IOCDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine('Hello World!');
            new BLL.PhoneBLL().PlayPhone();
            Console.ReadKey();
        }
    }
}

运行后

3. 现在我想使用Vivo手机了,那我就要更改BLL的调用,然后重新发布,不太方便呀!再有所有手机都能玩,直接使用接口实现实现玩手机操作?改改~

实现接口

using IDAL;
using System;
using System.Collections.Generic;
using System.Text;

namespace DAL
{
 public   class Vivo:IPhone
    {
        public void PlayPhone() {
            Console.Write('~hello Vivo');
        }
    }
}

BLL层如何能够不进行修改实现调用呢?可以使用构造函数、属性、接口进行注入,就不一一实现了(俺就是想偷懒~~)

using DAL;
using IDAL;
using System;
using System.Collections.Generic;
using System.Text;
namespace BLL
{
 public   class PhoneBLL
    {
        public IPhone _iphone;
        public PhoneBLL( IPhone iphone) {
            this._iphone = iphone;
        }
        public void PlayPhone() {
            _iphone.PlayPhone();
        }
    }
}

UI 这个时候我想玩那个手机我new 那个对象就可以了

using DAL;
using IDAL;
using System;
using System.Reflection;

namespace IOCDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine('Hello World!');
            IPhone iPhone = new Vivo();
            BLL.PhoneBLL phoneBLL = new BLL.PhoneBLL(iPhone);
            phoneBLL.PlayPhone();
            Console.ReadKey();
        }
    }
}
  1. 虽然现在能改尽量少的代码实现想要的操作,但还是不方便,还是要new,怎么能让它自动new呢,反射搞起来呀!改改改~
using DAL;
using IDAL;
using System;
using System.Reflection;
namespace IOCDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine('Hello World!');
           //Load(程序集名称)  CreateInstance (类名称,是否区分大小写) 
            Assembly asm = Assembly.Load('DAL');
            IPhone phone = (IPhone)asm.CreateInstance('DAL.Oppo', true);
            BLL.PhoneBLL phoneBLL = new BLL.PhoneBLL(phone);
            phoneBLL.PlayPhone();
            Console.ReadKey();
        }
    }
}

改过之后每次更换手机还是要改代码重新发布,这里可以使用配置文件实现不改代码切换使用的手机
5.

using DAL;
using IDAL;
using System;
using System.Configuration;
using System.Reflection;

namespace IOCDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine('Hello World!');
            string config = ConfigurationManager.AppSettings['DAL'].ToString();
            string[] configList = config.Split(',');
            Assembly asm = Assembly.Load(configList[0]);
            //Load(程序集名称)  CreateInstance (类名称,是否区分大小写) 
            IPhone phone = (IPhone)asm.CreateInstance(configList[1], true);
            //IPhone phone = new Vivo();
            BLL.PhoneBLL phoneBLL = new BLL.PhoneBLL(phone);
            phoneBLL.PlayPhone();
            Console.ReadKey();
        }
    }
}

改配置文件

<?xml version='1.0' encoding='utf-8' ?>
<configuration>
	<appSettings>
		<add key='DAL' value='DAL,DAL.Vivo'/>
	</appSettings>
</configuration>

6.小小总结下

  1. 自我理解IOC控制反转就是实现解耦的(由明确的依赖关系变成通过中间方依赖)
  2. DI(依赖注入) 是实现IOC的一种手段(自我理解他俩就是一个东西)
  3. 它难不难呢,花了两天会用,用的对不对不大清楚
  4. IOC后耦合更低,扩展性更强,性能相对就有点拉…
  5. 后边考虑拿Unity来玩玩

最后咱也不知道这理解对不对,只要思想不滑坡,方法总比困难多,欢迎各位大佬指导呀~~

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
vivo X30真机再曝光!真全面屏太刺激了!网友:有点像iphoneX?
比OPPO和vivo还坑的国产手机品牌! 丢尽国货的脸
小米第一款“类iPhone”手机,如今降价之后更划算!
OPPO涨800万 vivo涨1000万 Q2这两家赚得飞起
ASP.NET三层架构步骤讲解
OPPO和vivo引领国产手机新时代,不再模仿iPhone X!
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服