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

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(域内)的服务,这样的服务在一个自定义的“作用域”范围内是单例的。例如,在  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

 

3  使用  AddScoped   注入   使用微软依赖注入器Microsoft.Extensions.DependencyInjection_unable to cast object of type 'microsoft.extension-CSDN博客

 4 自定义配置文件   .Net6 winform 程序使用依赖注入 - harrychinese - 博客园 (cnblogs.com)     

5【讲解了用.NET Core中的DI注入配置数据。】.NET Core配置文件加载与DI注入配置数据 - 陈立扬 - 博客园 (cnblogs.com)

 

 

     services.AddMediatR(typeof(App).Assembly);  //注册中介者模式服务,启用Notification

     services.AddSingleton   services.AddScoped    services.AddTransient   //注册类的服务 

     services.AddOptions                                          //注册配置文件,可读取

     services.AddHostedService                         // BackgroundService 类 (Microsoft.Extensions.Hosting) | Microsoft Learn

 

 

服务:从服务容器取实例化(实例的状态取决你用的服务周期)

           从服务取配置文件   (配置文件可以存储配置信息)

 

posted @   爱学习VS  阅读(485)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示