依赖注入学习总结1

2023-11-03

生活中的“控制反转”:自己发电和用电网的电。

自己发电需要自购发电机,自学发电方法,维护发电设备等等。

用电网的电只需要付费就可以直接使用。

依赖注入(Dependency Injection,DI)是控制反转(Inversion of Control,IOC)思想的具体实现。

依赖注入优点:

简化模块的组装过程,降低模块之间的耦合度。

控制反转的目的:

由原来的“怎样创建XX对象”→“我要XX对象”。

控制反转两种实现方式:

1.服务定位器(ServiceLocator)

2.依赖注入(Dependency Injection,DI)

依赖注入的几个概念:

服务(service):对象。

注册服务。

服务容器:负责管理注册的服务。

查询服务:创建对象及关联对象。

对象声明周期:transient(瞬态);scoped(范围);singleton(单例)。

  瞬态:每次获取都是新的对象。

  范围:在一个范围内,每次获取都是同一个对象。

  单例:在任何范围获取的都是同一个对象。

代码示例:

定义一个接口和一个实现接口的类

    public interface ITestService
    {
        public string Name { get; set; }
        public void SayHi();
    }


    public class TestServiceImpl1 : ITestService
    {
        public string Name { get; set; }

        public void SayHi()
        {
            Console.WriteLine($"hello,I'm {Name}");
        }
    }

声明类的实例对象并调用类中的方法:

        static void Main(string[] args)
        {
            //常规写法
            {
                ITestService t = new TestServiceImpl1();
                t.Name = "jam";
                t.SayHi();
            }

            //IOC写法
            {
                ServiceCollection services = new ServiceCollection(); //构造容器对象
                services.AddTransient<TestServiceImpl1>();
                using (ServiceProvider sp = services.BuildServiceProvider()) //ServiceProvider 依赖注入系统的一个核心对象,调用ServiceCollection
                {
                    ITestService t = new TestServiceImpl1();
                    t.Name = "jam";
                    t.SayHi();
                }
            }


            Console.Read();
        }

两种写法,最后的结果都是一样的:

第一种写法是常规的写法,第二种写法是IOC控制反转的实现方式。

需要引用控制反转组件 Extensions.DependencyInjection

总结:

1、可以根据类型来获取和注册服务。分别指定服务类型(service type)和实现类型(implementation type)。这两者可能相同,也可能不同。

服务类型可以是类,也可以是接口,建议面向接口编程,更灵活。

2、.net控制反转组件取名为DependencyInjection,但它包含ServiceLocator的功能。

3、.net中使用依赖注入,需要引用包Extensions.DependencyInjection。

4、ServiceCollection用来构造容器对象IServiceCollection,调用ServiceCollection的BuildServiceProvider()创建的ServiceProvider,可以用来获取BuildServiceProvider()之前ServiceCollection中的对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

依赖注入学习总结1 的相关文章

  • Angular2文档学习的知识点摘要——依赖注入

    目录 目录依赖注入 xff08 DI xff09 为什么需要依赖注入 xff1f Angular 依赖注入 配置注入器在 NgModule 中注册提供商在组件中注册提供商该用NgModule还是应用组件 xff1f 注入服务显性注入器的创建
  • Spring-依赖注入(IOC)

    SPRING 一 依赖注入 xff08 IOC xff09 1 什么是依赖注入 xff08 1 xff09 我们经常说的控制反转 xff08 Inversion of Control IOC xff09 和依赖注入 xff08 Depend
  • spring的依赖注入

    一 点睛 控制反转和依赖注入在Spring环境下是等同的概念 xff0c 控制反转是通过依赖注入实现的 所谓依赖注入指的是容器负责创建对象和维护对象间的依赖关系 xff0c 而不是通过对象本身负责自己的创建和解决自己的依赖 依赖注入的主要目
  • 降低代码耦合度的方法 -依赖注入

    降低代码耦合度的方法 依赖注入 什么是依赖注入为什么要使用依赖注入Laravel中的依赖注入 什么是依赖注入 什么是依赖注入 xff0c 就要先了解什么是依赖 在面向对象语言中 xff0c A类需要引用B类中Y方法的 xff0c 则称A类和
  • 依赖注入

    举个例子 xff0c 组件A中有类ClassA xff0c 组件B中有接口IB和其对应的实现类B1和B2 那么 xff0c 现在ClassA需要利用IB接口来做一些事情 xff0c 例如 xff1a public class ClassA
  • 谈谈你对依赖注入(DI)和控制反转(IoC)的理解

    学习过Spring框架的人一定都会听过Spring的IoC 控制反转 DI 依赖注入 这两个概念 xff0c 对于初学Spring的人来说 xff0c 总觉得IoC DI这两个概念是模糊不清的 xff0c 是很难理解的 xff0c 今天和大
  • Nodejs+AngularJS模块之Angular依赖注入

    Nodejs 43 AngularJS模块之Angular依赖注入 Angular模块需要的模块idea项目结构1 基本的nodejs静态Web服务器代码2 在控制器和模块定义中实现依赖注入代码injector jsinjector htm
  • Spring学习(三)IOC控制反转与DI依赖注入

    IOC Inversion of Control 控制反转 是spring的核心 贯穿始终 所谓IOC 对于spring框架来说 就是由spring来负责控制对象的生命周期和对象间的关系 传统开发模式 对象之间互相依赖 IOC开发模式 IO
  • spring中的控制反转和依赖注入之间的关系

    Spring中的控制反转 把new这一个过程交给了spring容器去处理 控制反转就是将new对象这一个过程交给外部去做 即Spring 而不是自己去创建 图中的1 控制正转 并没有这个名词 只是为了更好的理解什么是控制反转 图2中并没有n
  • Field injection is not recommended 依赖注入方式

    参考文章 http vojtechruzicka com field dependency injection considered harmful 首先对于还不熟悉 Autowired的同学当然也包括我先去看看它到底有什么作用 自动装配
  • 何为依赖注入(DI)?

    何为依赖注入 DEPENDENCY INJECTION 平常在写代码的时候 经常会在一个类中写出这样的一段代码 以 PHP 代码展示
  • 控制反转及Bean装配的几种方式

    控制反转及Bean装配的几种方式 Spring两大基础核心 一是控制反转 二是依赖注入 控制反转和依赖注入 控制反转 通俗来讲 就是将bean的创建和销毁交由另一个东西全权管理 这个东西叫做Spring容器 一般来说 在Spring应用中
  • 详解Spring Ioc(控制反转)

    Spring Ioc 控制反转是一个比较抽象的概念 可以举例来说明 生活中 人们要用到一种东西 人们的基本想法就是找到东西 比如想喝果汁 在没有饮品店的日子里 最直接的做法就是 买果汁机 水果 准备开水 这时我们 主动 创造的过程 也就是一
  • Spring依赖注入

    内容主要来自 Spring实战 第二章 区别在于自己写了一个测试类 对于初学者更容易理解依赖注入 先定义两个接口 1 CompactDisc java package soundsystem public interface Compact
  • 【Spring】Spring依赖注入与控制反转理解

    Spring是一个庞大的框架 封装了很多成熟的功能 能够让我们无需重复造轮子 其次 它使用IOC进行依赖管理 利用JAVA的反射机制 将实例的初始化交给Spring Spring可以通过配置文件管理实例 我们就不用自己初始化实例啦 有人会问
  • GO 依赖注入

    依赖注入是软件工程中经常使用到的一种技术 它提供了一种控制反转的机制 把控制权利交给了调用方 调用方来决定使用哪些参数 哪些对象来进行具体的业务逻辑 依赖注入的本质其实是为了将组件的创建与其依赖的创建分离 实现原理 通过反射读取对象的依赖
  • Spring源码分析(十一)依赖注入源码解析4:DefaultListableBeanFactory#findAutowireCandidates 根据类型查找所有候选Bean

    根据类型查找所有候选Bean org springframework beans factory support DefaultListableBeanFactory findAutowireCandidates protected Map
  • Koin--适用于Kotlin的超好用依赖注入框架,Dagger替代者,Koin史上最详细解说,一篇就够了,妈妈再也不用担心我不会依赖注入了

    今年呆在家中实在无聊 外面太危险了 还是在家学习比较安全可持续 过年期间 我又复习了几遍依赖注入框架Dagger 诶 什么是依赖注入 说白了就是降低跟类对象之间的耦合 当需要修改类对象的时候 能不修改被依赖的实例 其实我们平常就用到了很多的
  • Flutter依赖注入

    依赖注入 依赖注入 Dependency Injection 简称DI 是一种软件设计模式 它的主要目的是将对象之间的依赖关系解耦 使得代码更加可维护 可测试 可扩展 使得代码更易于维护和测试 在Flutter中 DI可以帮助我们管理应用程
  • 30天精通Nodejs--第二十一天:express-依赖注入

    目录 引言 Express中的模块化实践 依赖注入 什么是依赖注入 Express中实现依赖注入 结语 引言 在构建大型且复杂的Node js Express应用程序时 良好的架构设计至关重要 模块化编程可以帮助我们把代码分解为可复用 易维

随机推荐

  • STM32F407+ESP8266连接机智云过程详解

    工程创建 代码调试过程参见 STM32F407 ESP8266 程序源码下载 STM32F407 ESP8266连接机智云程序源码
  • TCP实现服务器端接收客户端发送的数据

    一 服务器端接收 include
  • 面试官:Java 内存泄漏了,怎么排查?

    您好 我是路人 更多优质文章见个人博客 http itsoku com 由来 前些日子小组内安排值班 轮流看顾我们的服务 主要做一些报警邮件处理 Bug 排查 运营 issue 处理的事 工作日还好 无论干什么都要上班的 若是轮到周末 那这
  • 云原生时代消息中间件的演进路线

    引言 本文以一张云进化历史图开场 来谈谈云原生时代消息中间件的演进路线 但本文绝对不是 开局一张图 内容全靠编 从虚拟化技术诞生以来 IaaS PaaS SaaS 概念陆续被提了出来 各种容器技术层出不穷 到 2015 年 Cloud Na
  • 微信小程序使用腾讯位置服务路线规划插件

    微信小程序使用腾讯位置服务路线规划插件 避坑指南 在微信公众平台的设置里的第三方设置中 添加插件 然后点开详情 再点击开发文档 里面有详细的使用教程 我简单说一下 容易入的坑 首先第一点 插件不需要配置wxml啥的 直接app json引入
  • 为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?

    关于SQL和ORM的争论 永远都不会终止 我也一直在思考这个问题 昨天又跟群里的小伙伴进行了一番讨论 感触还是有一些 于是就有了今天这篇文 声明 本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论 只是摆事实 讲道理 所以
  • [人工智能-深度学习-43]:输入预处理 - 规范化Normalization、标准化Standardization、正态分布、算术平均、方差

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 121215445 目录 第1章 多维数
  • opencv之霍夫曼变换

    霍夫变换不仅可以找出图片中的直线 也可以找出圆 椭圆 三角形等等 只要你能定义出直线方程 圆形的方程等等 不得不说 现在网上的各种博客质量真的不行 网上一堆文章 乱TM瞎写 误人子弟 本身自己就没有理解的很清楚 又不去读算法实现的源码 写的
  • alibaba Sentinel 限流

    文章目录 pom yml app controller 过滤器限流 服务限流 pom
  • 过滤多余空格

    问题描述 一个句子中也许有多个连续空格 过滤掉多余的空格 只留下一个空格 输入格式 一行 一个字符串 长度不超过 200200 句子的头和尾都没有空格 输出格式 过滤之后的句子 Sample 1 Inputcopy Outputcopy H
  • 二分搜索树

    经典写法 内心os 就是有点繁琐hh include
  • ImportError: No module named ‘xxx‘ python无法找到工作目录下

    在目录下添加空文件 init py 这样文件夹 就被作为包处理 也就能找到了 参考 实战教程 VScode中误报 import error 解决方案 qfluohao的博客 CSDN博客 vscode使用import报错
  • phpstorm初始化设置(不定期更新)

    刚下载phpstorm肯定要进行一些初始化设置 方便我们的开发 设置 编辑器 文件编码 都改成UTF 8 以防出现乱码 设置 编辑器 颜色和字体 选用Monokai主题 便于舒适开发 设置 编辑器 颜色和字体 font 根据显示器 设置字体
  • 53. Maximum Subarray

    题目 Given an integer array nums find the contiguous subarray containing at least one number which has the largest sum and
  • win10pe系统计算机名修改,Win10怎么修改账户名?

    有些用户在重装win10系统的时候 因为忘记在开始的时候修改账户名称 所以 重装完成后系统的账户名称会默认是Administer 但是有些用户想修改 却不知道应该怎么修改 所以PE吧就给大家带来了win10修改账户名称的方法步骤 方法 步骤
  • redis实现点赞

    springboot集成redis实现点赞功能 提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一 springboot引入redis 二 功能实现 1 点赞流程说明 2 代码实现 总结 一 springboot
  • eclipse合并git分支

    合并选项 merge options m1 提交 提交结果 Commit commit the result m2 没有提交 准备合并提交 但是还没有提交 No commit prepare merge commit but don t c
  • Qt实现JSON数据的组包和解包

    目录 源代码 效果图 源代码 头文件 定义数据结构体 ifndef MAINWINDOW H define MAINWINDOW H include
  • 【机器学习】模型评价指标中的召回率低的原因

    1 样本标注时多数正样本被错误的标注为负样本 这样模型学到正例的能力变弱 这样正样本预测为负样本的同时 负样本的精度也会减少 方法一 对错误的标注样本进行修正 观察结果 看是否有改变 2 一般情况下 正负样本比列小于1 100 看到有的人说
  • 依赖注入学习总结1

    生活中的 控制反转 自己发电和用电网的电 自己发电需要自购发电机 自学发电方法 维护发电设备等等 用电网的电只需要付费就可以直接使用 依赖注入 Dependency Injection DI 是控制反转 Inversion of Contr