第47篇 简单IOC介绍

news/2024/11/5 18:32:43/文章来源:https://www.cnblogs.com/chenshibao/p/18528506

1.IOC的各种叫法

  • 依赖反转(Dependency Inversion),SOLD原则中的D
  • 控制反转(Inversion of Control)
  • 依赖注入
    Dependency Injection

2.什么是依赖注入

  • 一个类或对象依赖于另一个类或对象,即一个对象需要另一个对象来完成某个功能
  • OOP中,一个对象通常需要依赖其他对象来实现功能,这一现象非常普通
  • 如果感觉到知道工作原理成为了一种负担,那很可能就是在违背
    在实例化时,需要知道构造函数如何传参,如何初始化,如何处理生命周期,如何销毁等。

2.1 依赖处处存在

  • 举例
    一个对象需要调用logger来输出日志
    一个对象需要访问DBContext
    一个类需要序列化并保存为JSON文件
    一个视图View,需要得到它的视图模型ViewModel
    一个视图模型需要用MessageBox弹出提示

  • 常规方式的缺点
    代码重用性差,需要经常写重复代码
    各种依赖的配置缺乏统一管理
    难以进行统一调整、维护、扩展、单元测试
    经常需要借助全局变量、单例模式、静态方法、构造传引用等方式实现

  • 依赖注入的优势

3.设么是IOC容器

  • 什么是IOC容器
  • .net中常见的工具包
    Microsoft.Extensions.DependencyInjection
    AutoFac(经典、但速度相对较慢)
    DryIOC(速度最快)
    SimpleInjector(较容易上手)
  • 其他
    StrongInject
    Ninject
    Unity(已停止维护)

3.1 生命周期

  • 瞬态(Transient/Instance)
    只有在第一次被请求时才会被创建

  • 作用域(Scoped)
    只有在第一次被请求时才会被创建

  • 单例(Singleton)
    线程安全
    只有在第一次被请求时才会被创建

3.2 自动装配

Auto-wiring

3.3 注册的好处

控制生命周期
自动装配,免于传参
一个接口可能有不同的实现

4.WPF实战

哪些可以被IOC容器管理
在哪里构造容器
在别处如何使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/827255.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

举例说明什么情况下会更倾向于使用抽象类而不是接口

接口和抽象类都遵循”面向接口而不是实现编码”设计原则,它可以增加代码的灵活性,可以适应不断变化的需求。 接口 vs 抽象类 继承限制:Java 中,一个类只能继承一个类,但可以实现多个接口。 继承一个类意味着失去了继承其他类的机会。行为表示:接口通常用于表示附加的行为…

智慧测绘数字化管理平台建设方案

随着信息技术的飞速发展,测绘地理信息与遥感专业正经历着一场革命性的变革。智慧测绘数字化管理平台的建设,不仅能够提高测绘数据的准确性和实时性,还能为城市规划、环境保护、灾害预防等领域提供强有力的数据支持。本文将探讨智慧测绘数字化管理平台的建设方案,以期为相关…

劫持微信聊天记录并分析还原 —— 解密数据库(二)

程序以 Python 语言开发,可读取、解密、还原微信数据库并帮助用户查看聊天记录,还可以将其聊天记录导出为csv、html等格式用于AI训练,自动回复或备份等等作用。本工具设计的初衷是用来获取微信账号的相关信息并解析PC版微信的数据库。程序以 Python 语言开发,可读取、解密、…

2024newstarweb题解

w1 headach3会赢吗 源码flag碎片X1: ZmxhZ3tXQTB3 再次查看源码flag碎片X2: IV95NF9yM2Fs 第三个页面也是直接查看源码直接改源码flag碎片X3: MXlfR3I0c1B 下一个页面直接禁用jsflag碎片X4: fSkpKcyF9 ZmxhZ3tXQTB3IV95NF9yM2FsMXlfR3I0c1BfSkpKcyF9 base64解码即可的flag智械危…

判断一个数是不是质数(素数)

​public static boolean isPrime(int n){if (n <= 3) { return n > 1;) for(int i = 2; i < n; i++){if (n % i == 0) { return false;} ) return true;} 质数(也称为素数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的数。换句话说,质数只能被1和它…

Roaring Bitmap

Roaring Bitmap原理 Roaring Bitmaps 就是一种压缩位图索引,后文统称 RBM,RBM 的用途和 Bitmap 很差不多(比如说索引),只是说从性能、空间利用率各方面更优秀了。 RBM 的主要思想并不复杂,简单来讲,有如下三条:我们将 32-bit 的范围 ([0, n)) 划分为 2^16 个桶,每一个…

36 自然语言处理

自然语言,人类语言 将语言拆分,然后处理 语音识别:语音转文字,本质是音素识别 语音合成

力扣新手村之1342、1672、412

LeetCode: 1342[将数字变成0的操作次数] 1672[最富有客户的资产总量] 412[Fizz Buzz]1342[将数字变成0的操作次数] 题目 链接 LeetCode1342[将数字变成0的操作次数] 详情实例 实例1实例2实例3提示题解 思路 判断 num 是否为0 不为0则判断 num 是否为偶数 num 是偶数则除以2 nu…

什么是java序列化?什么情况下需要序列化?

序列化的定义 Java 序列化是为了保存各种对象在内存中的状态,并且可以把保存的对象状态再读出来。序列化是一种用于处理对象流的机制,它将对象的内容转换成一种可以在网络之间传输的形式。反序列化则是将这种形式的对象恢复成原来的对象。 实现方式 序列化是通过实现​​Seri…

国内首位聋人 Android 软件工程师体验通义灵码,“这真是太棒了”

通义灵码 @workspace 功能发布后,收到了非常多新老朋友的积极反馈,其中被一位特别的朋友留下了深刻的印象。Hi 大家好! 我就是人见人爱、Bug 闪开的通义灵码!上个月,我上线了一项新能力: 体验通义灵码 @workspace:轻松分析项目结构,结合代码仓库理解工程、查询问答等补…

诛仙3:幻心千劫|单机安装教程|虚拟机一键端|GM工具包

天给大家带来一款单机游戏的架设:诛仙3-幻心千劫-16职业。游戏版本:v4.4.0 只适用于单机娱乐,此教程是本人亲测所写,踩坑无数,如果你是小白跟着教程走也是可以搭建 亲测视频演示 https://githubs.xyz/show/297.mp4游戏安装步骤 此游戏架设需要安装虚拟机,没有虚拟机的请…