首页 > 其他分享 >WPF-----Microsoft.Extensions 探索 / 依赖注入(DI)

WPF-----Microsoft.Extensions 探索 / 依赖注入(DI)

时间:2023-11-20 16:55:28浏览次数:37  
标签:服务 DI 接口 IServiceCollection 添加 ----- Extensions Microsoft

1  对于IOC的具体介绍  Microsoft.Extensions 探索 / 依赖注入(DI) - 知乎 (zhihu.com)

 使用 DI 容器需要熟悉下面的接口与类型,Microsoft.Extensions.DependencyInjection.IServiceCollection,该接口包含了一系列 Add 扩展方法来添加你的服务,该接口的默认实现为 Microsoft.Extensions.DependencyInjection.ServiceCollection 类。

容器接口叫做 IServiceCollection 是因为“微软”将容器中的类型视为我们程序所需的服务,有了这个前提将它命名为 “ServiceCollection”也就非常合理了。

System.IServiceProvider,使用 IServiceCollection 的扩展方法 BuildServiceProvider() 可以得到一个默认的 ServiceProvider 对象来让我们获取服务实例,ServiceProvider 实现了IServiceProvider 接口,该接口包含了一个 GetService() 方法来获取服务。IServiceProvider 接口的默认实现为 Microsoft.Extensions.DependencyInjection.ServiceProvider 类。

2、IServiceCollection,添加服务与生命周期

IServiceCollection 接口包含一系列的扩张方法让我们方便的添加服务,常用的包括下面三个方法,

  • AddTransient,添加生命周期为Transient(短暂)的服务,这样的服务在每次被请求是都会创建一个新的实例。
  • AddSingleton ,添加生命周期为Singleton(单例)的服务,这样的服务只有在首次请求是创建一个新的实例,之后都会使用这个实例。
  • AddScoped,添加生命周期为Scoped(域内)的服务,这样的服务在一个自定义的“作用域”范围内是单例的。例如,在 http://ASP.NET Core 中 Scoped 服务在每一次请求中都是一个实例。

除此之外你也可以使用 Add 方法,并使用 ServiceLifetime 在参数中指定生命周期。

除了上面这三个常用方法之外,还有 TryAddTransient、TryAddSingleton、TryAddScoped 这三个用于添加服务的方法,与之前所提三个方法的区别在于带 Try 的这三个方法在添加服务时会检查服务是否已存在,若已经存在则不再添加。

services.AddSingleton<IMyDependency, MyDependency>();
//下面这行代码不起作用,因为IMyDependency服务已经存在。
services.TryAddSingleton<IMyDependency, DifferentDependency>();

除了上面所列的添加服务的方法,你还可以使用 TryAddEnumerable(ServiceDescriptor) 方法添加一个服务类型的可枚举对象作为服务,也就是将 IEnumerable<ServiceType>作为服务类型添加到容器。

 

 2 对服务的再次具体介绍  .NET 通用主机 - .NET | Microsoft Learn

 

 

 

 

标签:服务,DI,接口,IServiceCollection,添加,-----,Extensions,Microsoft
From: https://www.cnblogs.com/ZBO123/p/17844332.html

相关文章

  • 世微 电动车摩托车灯 5-80V 1.2A 一切二降压恒流驱动器AP2915
    产品描述    AP2915是一款可以一路灯串切换两路灯串的降压恒流驱动器,高效率、外围简单、内置功率管,适用于5-80V输入的高精度降压LED恒流驱动芯片。内置功率管输出最大功率可达12W,最大电流1.2A。AP2915一路灯亮切换两路灯亮,其中一路灯亮可以全亮,可以半亮。AP2915......
  • FreqScan-Debug及日常更新迭代
    %*************************************咸鱼:毛毛毛毛(tb8392689278)%*************************************#2023.11.20CSDN.Renew.V1修改原有文档中运行步骤(见下)各版本、场景通用*#运行步骤*1.将全部程序文件放置于同一文件夹2.打开SVG_10kw…….slx文件3.打开FreqScan......
  • redis在idea中的应用
    2023-11-20导入的依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency> packagecom.sky.test;importorg.junit.jupiter.api.Test......
  • Android Studio 下发布项目成APK文件
    AndroidStudio下发布项目成APK文件一、环境和版本Windows10专业版AndroidStudioGiraffe|2022.3.1Patch2这个太重要IDE该版后菜单位置会发生变化二、操作过程操作过程非常简单找到菜单Buid点击弹出后,再找到BuildBundle(s)/APK(s)鼠标滑动后选中BuildAPK(s)点击即可。新......
  • 配置上新 | 单双四核任选,TI Cortex-A53工业核心板仅198元起!
    创龙科技作为TI官方合作伙伴,在2022年9月即推出搭载TIAM62x最新明星处理器的工业核心板-SOM-TL62x。 SOM-TL62x工业核心板基于TISitara系列AM62x单/双/四核ARMCortex-A53+单核ARMCortex-M4F异构多核处理器设计,主频高达1.4GHz,支持2路TSN千兆网、3路CAN-FD、双屏异显、9路UAR......
  • spring-boot-starter-thymeleaf 避坑指南
    spring-boot-starter-thymeleaf避坑指南第一步:pom配置环境先不要管包是做什么的总之必须要有否则进坑1234567891011<!--避坑包-->      <dependency>          <groupId>net.sourceforge.nekohtml</groupId>          <a......
  • Codeforces Round 785 (Div. 2)
    A-SubtleSubstringSubtraction/**__----~~~~~~~~~~~------___*..~~//====......__--~~~*-.\_|//|||\\~~......
  • docker安装及安装redis
    一、安装docker1.准备安装环境:yuminstall-yyum-utils2.设置镜像仓库为阿里云:yum-config-manager\--add-repo\http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3.更新系统yum软件索引:yumcleanallyummakecache4.安装docker:yuminstalldocker-c......
  • 猜0-100的随机数字
    importjava.util.Random;importjava.util.Scanner;publicclassHelloWorld{publicstaticvoidmain(String[]args){//题目生成0-100的随机数字。Randomrandom=newRandom();inti=random.n......
  • MODBUS转PROFINET网关TS-180 网关连接西门子 PLC 和工业称重仪表
    随着科技的高速发展,工业自动化行业对日益多样的称重需求越来越高,上海某公司在国内的一个工业自动化项目中,监控中心系统需要远程实时采集工业称重仪表测量的各种称重参数。该系统使用的是西门子S7-300PLC,支持PROFINET以太网协议,工业称重仪表为该公司生产的称重显示控制器,提供......