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