依赖注入的基础

我们都知道DI,,他是一种开发模式。他是将服务可被应用程序任何位置的代码使用,当某个代码组件(如一个类)需要引用某些外部代码(一个服务)时。都有两种选择

1:直接在调用代码种创建服务组件的一个新实例。

2:收到该服务的一个有效实例。

比如一个操作是记录操作记录。那么看以下代码。业务逻辑和记录操作紧密耦合

public void  Home()
{
var log=new Logger();
log.Log("Waring");
}

如果该类移动到其他位置,那么必须也要移动所有引用和依赖,如果有数据库操作。那么使用的地方都要有数据库连接,

如果解耦

 private readonly ILogger _logger;

        public HomeController(ILogger  logger)
{
_logger = logger;
}
     public void Home()
{
var log=new Logger();
log.Log("Waring");
}

将其抽象为ILogger 接口,通过构造函数注入。

当然如果过度使用依赖注入,那么会有这样。依赖的有其他的依赖。以此类推。

可以使用DI框架。同时也叫IOC框架

var logger=SomeFrameworkIoC.Resolve(typeof(ILogger));

Service Locator模式

松耦合调用外部依赖,并非只有依赖注入。还有Service Locator。它能够创建与指定抽象类型匹配的实例。DI和它的关键区别在于,DI要求相应地设计外围代码;构造方法与其他方法的签名可能会发生变化。而它保守。  可读性差一点。当庞大的现有代码库种重构依赖时,它是一个理想选择。

如下:

public void Perform()
{
var logger=HttpContext.RequestService.GetService<ILogger>(); }

这是RequestService对象在HTTP上下文中扮演了Service Locator角色。

当然依赖注入的生命周期。大家想必都有所了解。我这里简单说一下

.NET Core DI简单介绍的更多相关文章

  1. Core文件简单介绍及生成设置方法

    Core文件简单介绍及生成设置方法 Core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行调试.当程序崩溃时便会产生core文件,其实准确的应该说是core dump 文 ...

  2. asp.net core网关Ocelot的简单介绍& Ocelot集成Identity认证

    文章简介  Ocelot网关简介 Ocelot集成Idnetity认证处理 Ocelot网关简介 Ocelot是一个基于netcore实现的API网关,本质是一组按特定顺序排列的中间件.Ocelot内 ...

  3. 依赖注入[8]: .NET Core DI框架[服务消费]

    包含服务注册信息的IServiceCollection对象最终被用来创建作为DI容器的IServiceProvider对象.当需要消费某个服务实例的时候,我们只需要指定服务类型调用IServicePr ...

  4. 依赖注入[6]: .NET Core DI框架[编程体验]

    毫不夸张地说,整个ASP.NET Core框架是建立在一个依赖注入框架之上的,它在应用启动时构建请求处理管道过程中,以及利用该管道处理每个请求过程中使用到的服务对象均来源于DI容器.该DI容器不仅为A ...

  5. .NET CORE学习笔记系列(2)——依赖注入[6]: .NET Core DI框架[编程体验]

    原文https://www.cnblogs.com/artech/p/net-core-di-06.html 毫不夸张地说,整个ASP.NET Core框架是建立在一个依赖注入框架之上的,它在应用启动 ...

  6. angular1.x的简单介绍(二)

    首先还是要强调一下DI,DI(Denpendency Injection)伸手获得,主要解决模块间的耦合关系.那么模块是又什么组成的呢?在我看来,模块的最小单位是类,多个类的组合就是模块.关于在根模块 ...

  7. iOS开发数据库篇—SQLite简单介绍

    iOS开发数据库篇—SQLite简单介绍 一.离线缓存 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等. 说明:离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式 (1 ...

  8. iOS开发UI篇—Quartz2D简单介绍

    iOS开发UI篇—Quartz2D简单介绍 一.什么是Quartz2D Quartz 2D是⼀个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作: 绘制图形 : 线条\三角形\ ...

  9. iOS开发数据库篇—FMDB简单介绍

    iOS开发数据库篇—FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来 ...

随机推荐

  1. spring @Scheduled注解 定时任务 详解

    scheduled的使用注解的方式进行调度 先要配置spring.xml xmlns:task="http://www.springframework.org/schema/task&quo ...

  2. React报错Failed prop type: Invalid prop `component` of type `object` supplied to `Route`, expected `function`

    引言 最近在忙毕业设计,博客也很久没更新了,毕业设计使用vue做了一个校园寻物网站,现在开始学Raect,记录一下自己遇到问题,react-redux的connect方法使得组件与Redux建立了联系 ...

  3. Python小白入门题一——文件增删改

    题目描述:用python对文件进行增(创建一个文件).删(删除一个文件).改(重命名)操作. 说明:新建了一个文件夹files存放新增的两个文件,随后这两个文件被批量重命名成“数字.txt”,之后这两 ...

  4. 视觉slam十四讲ch5 joinMap.cpp 代码注释(笔记版)

    #include <iostream> #include <fstream> using namespace std; #include <opencv2/core/co ...

  5. 吴sir 讲Python之——Pycharm的安装教程 (一)

    欢迎您进入老吴的博客,如有联系请加QQ群:1055524279 首先在Pycharm的官网下载Pycharm Pycharm官网链接:https://www.jetbrains.com/pycharm ...

  6. 机器学习总结-sklearn参数解释

    本文转自:lytforgood 机器学习总结-sklearn参数解释 实验数据集选取: 1分类数据选取 load_iris 鸢尾花数据集 from sklearn.datasets import lo ...

  7. 《C语言》—— 数组详解

    书籍使我变成了一个幸福的人,使我的生活变成轻松而舒适的诗.--高尔基 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues. https://github.com/midou-tec ...

  8. 《Head first设计模式》之模版方法模式

    模板方法模式在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 有些人没有咖啡就活不下去:有些人则离不开茶.两者共同的 ...

  9. elasticsearch kibana 安装 配置

    二.Elasticsearch  配置信息 2.1  因为 Elasticsearch 可以执行脚本文件,为了安全性,默认不允许通过 root 用户启动服务.我们需要新创建用户名和用户组启动服务 2. ...

  10. Python json格式处理

    Python json格式处理 首先放一段代码 import requests import jsonpath import json f=open('ip.txt','r',encoding='ut ...