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(域内)的服务,这样的服务在一个自定义的“作用域”范围内是单例的。例如,在 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
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
服务:从服务容器取实例化(实例的状态取决你用的服务周期)
从服务取配置文件 (配置文件可以存储配置信息)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?