ASP.NET Core IOC容器


//IOC容器支持依赖注入{ServiceCollection serviceDescriptors = new ServiceCollection();serviceDescriptors.AddTransient<IMicrophone, Microphone>();serviceDescriptors.AddTransient<IPower, Power>();serviceDescriptors.AddTransient<IHeadphone, Headphone>();ServiceProvider serviceProvider =serviceDescriptors.BuildServiceProvider();IHeadphone headphone = serviceProvider.GetService<IHeadphone>();}


AddTransient:瞬时生命周期,每一次创建都是是一个全新的实例
ServiceCollection serviceDescriptors = new ServiceCollection();
serviceDescriptors.AddTransient<IMicrophone, Microphone>();
ServiceProvider serviceProvider =serviceDescriptors.BuildServiceProvider();
IMicrophone microphone1 = serviceProvider.GetService<IMicrophone>();
AddSingleton:单例生命周期:同一个类型,创建出来的是同一个实例
ServiceCollection serviceDescriptors = new ServiceCollection();
serviceDescriptors.AddSingleton<IMicrophone, Microphone>();
ServiceProvider serviceProvider = serviceDescriptors.BuildServiceProvider();
IMicrophone microphone1 = serviceProvider.GetService<IMicrophone>();
AddScoped:作用域生命周期: 同一个serviceProvider获取到的是同一个实例
ServiceCollection serviceDescriptors = new ServiceCollection();
serviceDescriptors.AddScoped<IMicrophone, Microphone>();
ServiceProvider serviceProvider1 = serviceDescriptors.BuildServiceProvider();
IMicrophone microphone1 = serviceProvider1.GetService<IMicrophone>();
ServiceCollection 抽象和具体之间多种注册方式

{ServiceCollection serviceDescriptors = new ServiceCollection();serviceDescriptors.AddTransient<IMicrophone, Microphone>();ServiceProvider serviceProvider1 = serviceDescriptors.BuildServiceProvider();IMicrophone microphone1 = serviceProvider1.GetService<IMicrophone>();
}
{ServiceCollection serviceDescriptors = new ServiceCollection();serviceDescriptors.AddTransient(typeof(IMicrophone), typeof(Microphone));ServiceProvider serviceProvider1 = serviceDescriptors.BuildServiceProvider();IMicrophone microphone1 = serviceProvider1.GetService<IMicrophone>();
}
//注册抽象和一段业务逻辑
{ServiceCollection serviceDescriptors = new ServiceCollection();serviceDescriptors.AddTransient(typeof(IPower), provider =>{//在这里可以我们自己来决定如何创建这个对象的实例;可以对创建出来的这个实例,可以做加工IMicrophone microphone = provider.GetService<IMicrophone>();return new Power(microphone);});serviceDescriptors.AddTransient(typeof(IMicrophone), typeof(Microphone));ServiceProvider serviceProvider1 = serviceDescriptors.BuildServiceProvider();IPower power = serviceProvider1.GetService<IPower>();
}
{ServiceCollection serviceDescriptors = new ServiceCollection();serviceDescriptors.AddTransient(typeof(Microphone));ServiceProvider serviceProvider1 = serviceDescriptors.BuildServiceProvider();Microphone microphone1 = serviceProvider1.GetService<Microphone>();
}{ServiceCollection serviceDescriptors = new ServiceCollection();serviceDescriptors.AddTransient<Microphone>();ServiceProvider serviceProvider1 = serviceDescriptors.BuildServiceProvider();Microphone microphone1 = serviceProvider1.GetService<Microphone>();
}

相关文章:
ASP.NET Core IOC容器
//IOC容器支持依赖注入{ServiceCollection serviceDescriptors new ServiceCollection();serviceDescriptors.AddTransient<IMicrophone, Microphone>();serviceDescriptors.AddTransient<IPower, Power>();serviceDescriptors.AddTransient<IHeadphone, Headp…...
入门力扣自学笔记277 C++ (题目编号:42)(动态规划)
42. 接雨水 题目: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组…...
SwiftUI实现iPad多任务分屏
1. 概述 iPadOS引入了多任务分屏功能,使用户能够同时在一个屏幕上使用多个应用程序。这为用户提供了更高效的工作环境,可以在同一时间处理多个任务。 iPad多任务分屏有两种常见的模式:1/2分屏和Slide Over(滑动覆盖)…...
maven依赖,继承
依赖的范围 compile引入的依赖 对main目录下的代码有没有效,main目录下的代码能不能用compile引入的依赖中的类等 以test引入的依赖,在main中是否可以使用 provided(已提供),有了就不要带到服务器上,打包…...
仿`gRPC`功能实现像调用本地方法一样调用其他服务器方法
文章目录 仿gRPC功能实现像调用本地方法一样调用其他服务器方法 简介单体架构微服务架构RPCgPRC gRPC交互逻辑服务端逻辑客户端逻辑示例图 原生实现仿gRPC框架编写客户端方法编写服务端方法综合演示 仿 gRPC功能实现像调用本地方法一样调用其他服务器方法 简介 在介绍gRPC简介…...
分布式环境下的数据同步
一般而言elasticsearch负责搜索(查询),而sql数据负责记录(增删改),elasticsearch中的数据来自于sql数据库,因此sql数据发生改变时,elasticsearch也必须跟着改变,这个就是…...
无涯教程-Flutter - 数据库
SQLite" class"css-1occaib">SQLite数据库是基于事实和标准SQL的嵌入式数据库引擎,它是小型且经过时间考验的数据库引擎,sqflite软件包提供了许多函数,可以有效地与SQLite数据库一起使用,它提供了操作SQLite数据…...
算法笔记:平衡二叉树
1 介绍 平衡二叉树(AVL树)是一种特殊的二叉搜索树(BST),它自动确保树保持低高度,以便实现各种基本操作(如添加、删除和查找)的高效性能。 ——>时间都维持在了O(logN)它是一棵空…...
redis 通用命令
目录 通用命令是什么 SET & GET keys EXISTS DEL EXPIRE TTL redis 的过期策略 定时器策略 基于优先级队列定时器 基于时间轮的定时器 TYPE 通过 redis 客户端和 redis 服务器交互。 所以需要使用 redis 的命令,但是 redis 的命令非常多。 通用命令…...
Pycharm配置及使用Git教程
文章目录 1. 安装PyCharm2. 安装Git3. 在PyCharm中配置Git插件4. 连接远程Gtilab仓库5. Clone项目代码6. 将本地文件提交到远程仓库6.1 git add6.2 git commit6.3 git push6.4 git pull 平时习惯在windows下开发,但是我们又需要实时将远方仓库的代码clone到本地&…...
CSS transition 过渡
1 前言 水平居中、垂直居中是前端面试百问不厌的问题。 其实现方案也是多种多样,常叫人头昏眼花。 水平方向可以认为是内联方向,垂直方向认为是块级方向。 下面介绍一些常见的方法。 2 内联元素的水平垂直居中 首先,常见内联元素有&…...
Unity中Shader的UV扭曲效果的实现
文章目录 前言一、实现的思路1、在属性面板暴露一个 扭曲贴图的属性2、在片元结构体中,新增一个float2类型的变量,用于独立存储将用于扭曲的纹理的信息3、在顶点着色器中,根据需要使用TRANSFORM_TEX对Tilling 和 Offset 插值;以及…...
Automotive 添加一个特权APP
Automotive 添加一个特权APP platform: android-13.0.0_r32 一. 添加一个自定义空调的app为例 路径:packages/apps/Car/MyHvac app内容可以自己定义,目录结构如下: 1.1 Android.bp package {default_applicable_licenses: ["Andr…...
自定义TimeLine
自定义TimeLine 什么是TimeLineData(数据)Clip(片段)Track(轨道)Mixer(混合) 什么是TimeLine 在 Unity 中,TimeLine(时间轴)是一种用于创建和管理…...
如何使用SQL系列 之 如何在SQL中使用WHERE条件语句
引言 在结构化查询语言 (SQL)语句中,WHERE子句限制了给定操作会影响哪些行。它们通过定义特定的条件(称为搜索条件)来实现这一点,每一行都必须满足这些条件才能受到操作的影响。 本指南将介绍WHERE子句中使用的通用语法。它还将概述如何在单个WHERE子句…...
leetcode:1941. 检查是否所有字符出现次数相同(python3解法)
难度:简单 给你一个字符串 s ,如果 s 是一个 好 字符串,请你返回 true ,否则请返回 false 。 如果 s 中出现过的 所有 字符的出现次数 相同 ,那么我们称字符串 s 是 好 字符串。 示例 1: 输入:s…...
Echarts 各种点击事件监听
目录 一、鼠标事件1.1、左击1.2、双击1.3、右击1.4、右键双击1.5、中轴滚动二、时间轴2.1、时间轴监听三、拖动3.1、拖动事件一、鼠标事件 1.1、左击 chart.on(click, function(params)...
《智能网联汽车自动驾驶功能测试规程》
一、 编制背景 2018 年4 月12 日,工业和信息化部、公安部、交通运输部联合发布《智能网联汽车道路测试管理规范(试行)》(以下简称《管理规范》),对智能网联汽车道路测试申请、审核、管理以及测试主体、测试驾驶人和测试车辆要求等…...
NVIDIA CUDA Win10安装步骤
前言 windows10 版本安装 CUDA ,首先需要下载两个安装包 CUDA toolkit(toolkit就是指工具包)cuDNN 1. 安装前准备 在安装CUDA之前,需要完成以下准备工作: 确认你的显卡已经正确安装,在设备管理器中可以看…...
Elasticsearch、Kibana以及Java操作ES 的快速使用
docker 安装elastic search 、 kibana(可视化管理elastic search) docker pull elasticsearch:7.12.1 docker pull kibana:7.12.1创建docker自定义网络 docker自定义网络可以使得容器之间使用容器名网络互连,默认的网络不会有这功能。 一定…...
如何从视频中高效提取幻灯片:智能工具应用指南
如何从视频中高效提取幻灯片:智能工具应用指南 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 你是否曾遇到这样的困扰:参加线上会议后想整理演示文稿&#x…...
短视频 SEO 优化对于新手有什么建议_如何分析短视频的 SEO 效果
短视频 SEO 优化对于新手有什么建议 在当今数字化时代,短视频平台已经成为了人们获取信息和娱乐的重要途径。无论是抖音、快手,还是TikTok,短视频内容的迅速增长引发了广大创作者对SEO(搜索引擎优化)的关注。对于新手…...
齿轮基础参数
基于传统势能法含裂纹斜齿轮时变啮合刚度(裂纹斜齿轮),代码保证运行无问题,出图效果如页面简介齿轮传动系统里最怕遇到啥?裂纹呗!尤其是斜齿轮这种接触线斜着走的家伙,一旦出现裂纹整个时变刚度曲线直接抽风…...
Three.js实战:打造交互式3D中国地图可视化
1. 从零开始搭建3D中国地图 第一次接触Three.js时,我被它强大的3D渲染能力震撼到了。作为一个长期从事数据可视化的开发者,我一直在寻找能够将地理数据以更生动方式呈现的工具。Three.js配合D3.js的组合,完美解决了这个问题。 1.1 数据准备与…...
QuiX公司取得光子量子计算纠错重大突破
QuiX Quantum公司周四宣布,该公司已成功演示了光子量子计算机中首个低于阈值的错误缓解技术,这一突破被认为有助于实现可扩展的容错量子系统。QuiX表示,其方法将物理量子比特的错误率降低到与大规模量子计算兼容的水平。这些研究结果是在QuiX…...
实验室服务器远程访问终极方案:SSH 反向隧道 + systemd 自动重连
🚀 实验室服务器远程访问终极方案:SSH 反向隧道 systemd 自动重连适用于: 没有公网 IP 的实验室服务器想用 VSCode / SSH / Jupyter 远程开发希望稳定、自动重连、开机自启🧠 一、问题背景 在很多实验室环境中: GPU 服…...
判断当前页面是否以「添加到主屏幕」应用形态启动 (快捷方式\APP、套壳包等启动)
这里写自定义目录标题判断当前页面是否以「添加到主屏幕」应用形态启动判断当前页面是否以「添加到主屏幕」应用形态启动 /*** 判断当前页面是否以「添加到主屏幕」应用形态启动* - iOS Safari: navigator.standalone* - 标准 PWA: display-mode 为 standalone/fullscreen/min…...
5大核心功能打造高效媒体播放:免费开源解码工具LAV Filters全解析
5大核心功能打造高效媒体播放:免费开源解码工具LAV Filters全解析 【免费下载链接】LAVFilters LAV Filters - Open-Source DirectShow Media Splitter and Decoders 项目地址: https://gitcode.com/gh_mirrors/la/LAVFilters 在数字媒体播放领域,…...
我被TRO了,到底该选和解还是应诉?
很多跨境卖家第一次遭遇TRO(临时限制令)时,往往是懵的:店铺被冻结、资金被锁、链接下架,一夜之间业务几乎停摆。这个时候最核心的问题只有一个——到底该和解,还是应诉?先说结论:没有…...
AI 模型推理延迟与吞吐率的权衡
AI模型推理延迟与吞吐率的权衡:优化策略与实践 在AI应用场景中,模型推理的延迟(Latency)和吞吐率(Throughput)是衡量系统性能的两大核心指标。延迟指单次请求的响应时间,直接影响用户体验&…...
