asp.net core 依赖注入 实例化对象实例

        在面向对象编程中,推荐使用面向接口编程,这样我们的代码就依赖于服务接口,而不是依赖于实现类,可以实现代码解耦


名称解释:

        我们把负责提供对象的注册和 获取功能的框架叫作“容器”,

        注册到容器中的对象叫作“服务”(service);

        依赖注入(dependency injection,DI):假设框架中有一个自动为类的属性赋值的功能,只要在代码中 通过属性声明说明我们需要什么类型的对象,框架就会创建这个对象。

        控制反转(inversion of control,IoC)是设计模式中非常重要的思想,而依赖注入 (dependency injection,DI)是控制反转思想的一种重要的实现方式。

        控制反转的目的就是把“创建和组装对象”操作的控制权从业务逻辑的代码中转移到框架 中,这样业务代码中只要说明“我需要某个类型的对象”,框架就会帮助我们创建这个对象。

        控制反转就是把“我创建对象”,变成“我要对象”

        实现控制反转的时候,我 们可以采用依赖注入或者服务定位器两种方式。


        因此在使用依赖注入的时候,推荐服务类型用接 口类型。

        在获取服务之前,需要先注册服务,所以我们先要创建用于注册服务的容器

核心组件:

        在.Net Core中的DI核心分为两个组件:IServiceCollectionIServiceProvider

  • IServiceCollection负责注册
  • IServiceProvider负责提供实例

比如:

        在注册服务的时候,可以设定服务类型和实现类型都是 SqlConnection, 这样在获取 SqlConnection 类型服务的时候,容器就会返回注册的 SqlConnection 类型的对象;
        也可以在注册服务的时候,设定服务类型是 IDbConnection,实现类型是 SqlConnection,这样 在获取 IDbConnection 类型服务的时候,容器就返回注册的 SqlConnection 类型的对象。


实例代码如下:

    /// <summary>/// 接口定义/// </summary>public interface IClass5{void Dosomething();}/// <summary>/// 接口类的具体实现类/// </summary>public class Class5: IClass5{readonly ILogger<Class5> CurLogger;public Class5(ILogger<Class5> logger){CurLogger = logger;}public void Dosomething(){CurLogger.LogWarning("告警日志");CurLogger.LogError("错误日志");CurLogger.LogInformation("Jim , age:20");try{int i = int.Parse("abc");}catch (Exception ex){CurLogger.LogError(ex, "解析字符串int失败");}}}
using NbsDemo;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;namespace ConsoleApp5
{internal class Program{static void Main(string[] args){//创建容器ServiceCollection services = new ServiceCollection();services.AddLogging(logBuilder =>{logBuilder.AddConsole();});//注册服务//要注册的服务是【DemoLogging.IClass5】,要求容器返回【 DemoLogging.Class5】类型的对象services.AddScoped<DemoLogging.IClass5, DemoLogging.Class5>();using (var scope = services.BuildServiceProvider()){//获取服务要求的类型对象var tempObj = scope.GetRequiredService<DemoLogging.IClass5>();//调用对象的方法tempObj.Dosomething();}Console.WriteLine("\npress any key to end...");Console.ReadLine();Console.WriteLine();} } 
} 

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

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

相关文章

第十三章 以编程方式使用 SQL 网关 - %SQLGatewayConnection 快速参考

文章目录 第十三章 以编程方式使用 SQL 网关 - %SQLGatewayConnection 快速参考%SQLGatewayConnection 快速参考%SQLGatewayConnection API 概述管理连接状态及查询方法使用共享库 第十三章 以编程方式使用 SQL 网关 - %SQLGatewayConnection 快速参考 %SQLGatewayConnection …

CMS 检测神器:CMSeek 保姆级教程(附链接)

一、介绍 CMSeek&#xff08;Content Management System Exploitation and Enumeration Toolkit&#xff09;是一款用于检测和利用网站上可能存在的内容管理系统&#xff08;CMS&#xff09;漏洞的开源工具。它旨在帮助安全研究人员和渗透测试人员识别目标网站所使用的CMS&…

Linux的可移植性

不顾可移植性&#xff0c;尽可能多地使用汇编代码。 linux在可移植性上&#xff0c;走的是中间路线&#xff0c;所有接口和核心代码都是用的c语言&#xff0c;但是对于性能要求高的部分都会根据硬件进行调整。 体系结构 说到计算机的体系结构&#xff0c;具体包含计算机的指令…

Kubernetes的有状态应用示例:ZooKeeper

文章目录 环境ZooKeeper简介准备部署尝试1尝试2 验证深入了解ZooKeeperleader和follower测试容忍node故障持久化存储 参考 环境 RHEL 9.3Docker Community 24.0.7minikube v1.32.0 ZooKeeper简介 Apache ZooKeeper是一个分布式的开源协调服务&#xff0c;用于分布式系统。Zo…

服务器安装Docker (centOS)

1. 卸载旧版本的Docker&#xff08;如果有&#xff09; 首先&#xff0c;如果您的系统上安装了旧版本的Docker&#xff0c;需要将其卸载。Docker的旧版本称为docker或docker-engine。使用以下命令来卸载旧版本&#xff1a; sudo yum remove docker \ docker-client \ docker-…

2024牛客寒假算法基础集训营2部分题解

Tokitsukaze and Bracelet 链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 《绯染天空》是一款由 key 社与飞机社共同开发的角色扮演游戏&#xff0c;剧情内容由著名的剧本作家麻枝准编写。它是一款氪金手游&#xff0c;但也有 st…

成为CSDN博客优质创作者或者博客专家吧

成为CSDN博客优质创作者或者博客专家吧 文章目录 成为CSDN博客优质创作者或者博客专家吧一、前言二、如何成为CSDN的博客专家1、2009年的要求和申请方式2、最新的CSDN博客专家要求和申请方式3、创作者身份认证4、CSDN所有认证的介绍 三、写博客的好处1、比较官方的说法&#xf…

Nacos1.X源码解读(待完善)

目录 下载源码 注册服务 客户端注册流程 注册接口API 服务端处理注册请求 设计亮点 服务端流程图 下载源码 1. 克隆git地址到本地 # 下载nacos源码 git clone https://github.com/alibaba/nacos.git 2. 切换分支到1.4.7, maven编译(3.5.1) 3. 找到启动类com.alibaba.na…

波卡 2023 四季度报告:开发者数量位列加密生态前三,五项新技术将于今年发布

作者&#xff1a;Nicholas Garcia&#xff5c;Messari 研究分析师 编译&#xff1a;OneBlock 原文&#xff1a;https://messari.io/report/state-of-polkadot-q4-2023?utm_mediumorganic_social&utm_sourcetwitter_messari&utm_campaignstate_of_polkadot_q4_2023 …

RabbitMQ的延迟队列实现[死信队列](笔记二)

上一篇已经讲述了实现死信队列的rabbitMQ服务配置&#xff0c;可以点击: RabbitMQ的延迟队列实现(笔记一) 目录 搭建一个新的springboot项目模仿订单延迟支付过期操作启动项目进行测试 搭建一个新的springboot项目 1.相关核心依赖如下 <dependency><groupId>org.…

13. UE5 RPG限制Attribute的值的范围以及生成结构体

前面几章&#xff0c;我们实现了通过GameplayEffect对Attribute值的修改&#xff0c;比如血量和蓝量&#xff0c;我们都是有一个最大血量和最大蓝量去限制它的最大值&#xff0c;而且血量和蓝量最小值不会小于零。之前我们是没有实现相关限制的&#xff0c;接下来&#xff0c;我…

小白水平理解面试经典题目LeetCode 71. Simplify Path【Stack类】

71. 简化路径 小白渣翻译 给定一个字符串 path &#xff0c;它是 Unix 风格文件系统中文件或目录的绝对路径&#xff08;以斜杠 ‘/’ 开头&#xff09;&#xff0c;将其转换为简化的规范路径。 在 Unix 风格的文件系统中&#xff0c;句点 ‘.’ 指的是当前目录&#xff0c;…

flutter监听app进入前后台状态的实现

在开发app的过程中&#xff0c;我们经常需要根据app的前后台的状态&#xff0c;做一些事情&#xff0c;那么我们在flutter中是如何实现这一监听的&#xff1f; flutter给我们提供了WidgetsBindingObserver来进行一些状态的判断&#xff0c;但是判断前后台的状态只是该API种其中…

微软.NET6开发的C#特性——接口和属性

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;看到不少初学者在学习编程语言的过程中如此的痛苦&#xff0c;我决定做点什么&#xff0c;下面我就重点讲讲微软.NET6开发人员需要知道的C#特性。 C#经历了多年发展&#xff0c; 进行了多次重大创新&#xf…

为什么要设置止损

2024年1月至2月7日&#xff0c;A股最令人瞩目的事件就是代表小微盘的中证500和中证1000雪球连续敲入&#xff0c;以及万得微盘指数的崩塌&#xff08;1个月下跌50%&#xff09;。 这次的这个过程中&#xff0c;止损很重要。一般情况下&#xff0c;如果设置了20%回撤止损的话&am…

Vue-58、Vue技术命名路由

命名路由 1、作用&#xff1a;可以简化路由的跳转 2、如何使用 1、给路由命名&#xff1a;routes:[{name:guanyu,//给路由命名path:/about,component:About},{path:/home,component:Home,children:[{path:news,component:News},{path:message,component:Message,children:[{…

JDK17新特性

JDK 17 是 Java Development Kit 的一个版本&#xff0c;它引入了许多新的特性和改进。以下是 JDK 17 中一些主要的新特性&#xff1a; Sealed classes&#xff1a;此特性允许开发人员限制某个类的子类数量&#xff0c;并且只有在同一个模块中定义的类才能作为其子类。 Patter…

#Js篇:数组的方法es5和es6

数组方法学习 判断一个数组的方法 Array.isArray() javascript内置的方法&#xff0c;用于检测给定的对象是否为数组类型。 早期版本兼容性es5引入&#xff0c;对于不支持es5的老旧浏览器&#xff08;如ie8及更早版本&#xff09;&#xff0c;该方法不可用。 es5实例方法 …

跨品牌智能家居控制_从原理到实现_HomeAssistant

项目地址&#xff1a;https://github.com/home-assistant/core Star&#xff1a;67 K 1 引言 最近去南方玩&#xff0c;住了一些智能酒店&#xff0c;自动开关电视、窗帘、灯、空调&#xff0c;还挺好用的&#xff0c;尤其喜欢关灯这功能。先不说它的理解能力&#xff08;对同…

鸿蒙学习-app.json5配置文件

官网文档参考&#xff1a;https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/app-configuration-file-0000001427584584-V3 位于AppScope下的app.json5配置文件 一、基础属性 {"app": {/*包名*/"bundleName": "com.example.dem…