TryAddEnumerable(ServiceDescriptor) 和其他 TryAdd{lifetime} 调用之间的确切区别是什么
What is the precise difference between TryAddEnumerable(ServiceDescriptor) and other TryAdd{lifetime} calls
services.TryAddEnumerable(ServiceDescriptor) 和另一组调用(TryAddSingleton、TryAddScoped、TryAddTransient)似乎都在做同样的事情——它们首先检查依赖注入容器中的服务注册情况,然后然后只有在尚未注册时才注册它。
这是文档的相关 link:
https://docs.microsoft.com/en-us/dotnet/core/extensions/dependency-injection --- 它并没有真正阐明区别,我无法从 google 搜索中找到很多东西。
好的,我发现了不同之处:
TryAdd
{lifetime}()
...例如TryAddSingleton()
...窥探DI容器,寻找是否ANY 实现类型(具体 class)已为给定的服务类型(接口)注册。如果是,则它不会为服务类型(在调用中给出)注册实现类型(在调用中给出)。如果没有,那就是。
TryAddEnumerable
(ServiceDescriptor)另一方面窥探DI容器,寻找SAME实现类型(具体class)是否为调用中给定的实现类型已经为给定的服务类型注册。如果是,则它不会为服务类型(在调用中给出)注册实现类型(在调用中给出)。如果不是,那就是。这就是为什么那里有 Enumberable
后缀的原因。后缀表示同一个服务类型会注册多个实现类型!
services.TryAddEnumerable(ServiceDescriptor) 和另一组调用(TryAddSingleton、TryAddScoped、TryAddTransient)似乎都在做同样的事情——它们首先检查依赖注入容器中的服务注册情况,然后然后只有在尚未注册时才注册它。
这是文档的相关 link: https://docs.microsoft.com/en-us/dotnet/core/extensions/dependency-injection --- 它并没有真正阐明区别,我无法从 google 搜索中找到很多东西。
好的,我发现了不同之处:
TryAdd
{lifetime}()
...例如TryAddSingleton()
...窥探DI容器,寻找是否ANY 实现类型(具体 class)已为给定的服务类型(接口)注册。如果是,则它不会为服务类型(在调用中给出)注册实现类型(在调用中给出)。如果没有,那就是。
TryAddEnumerable
(ServiceDescriptor)另一方面窥探DI容器,寻找SAME实现类型(具体class)是否为调用中给定的实现类型已经为给定的服务类型注册。如果是,则它不会为服务类型(在调用中给出)注册实现类型(在调用中给出)。如果不是,那就是。这就是为什么那里有 Enumberable
后缀的原因。后缀表示同一个服务类型会注册多个实现类型!