zoukankan      html  css  js  c++  java
  • .Net Core依赖注入中TryAddEnumerable 和TryAddTransient方法的区别

    .Net Core依赖注入添加的每个服务,最终都会转换为一个ServiceDescriptor的实例,ServiceDescriptor包含以下属性:

    Lifetime:服务的生命周期(Singleton:单例,Scoped:单个请求期间,Transient:暂时的,每次都创建一个实例)

    ServiceType:服务类型

    ImplementationType:服务的实现类型

    ImplementationInstance:实现类型的实例

    TryAddEnumerable和TryAddTransient都是用于添加服务,他们的却别就在于过滤条件不同

    TryAddEnumerable在添加时会根据服务的ServiceType和ImplementationType进行判断,如果已存在对应的服务则不添加,适用于为同一个服务添加多个不同的实现的场景,源代码如下:

    if (!services.Any(d =>
                                  d.ServiceType == descriptor.ServiceType &&
                                  d.GetImplementationType() == implementationType))
                {
                    services.Add(descriptor);
                }

    TryAddTransient在添加时只根据服务的ServiceType进行判断,如果已存在该类型的服务,则不添加,该方法适用于同一个服务已存在的服务不在添加的场景,源代码如下:

                if (!collection.Any(d => d.ServiceType == descriptor.ServiceType))
                {
                    collection.Add(descriptor);
                }

     

    为之则易,不为则难
  • 相关阅读:
    Codeforces Round #336 B
    Codeforces Round #336 A
    hiho一下157
    Codeforces Round #420 E
    Codeforces Round #420 C
    Codeforces Round #420 B
    Codeforces Round #420 A
    Codeforces Round #418 C
    Codeforces Round #418 B
    CodeForces 811D Vladik and Favorite Game bfs,模拟
  • 原文地址:https://www.cnblogs.com/oldli/p/8547877.html
Copyright © 2011-2022 走看看