/// <summary> /// 尝试获取指定类型的服务描述符。 /// </summary> /// <param name="services">给定的 <see cref="IServiceCollection"/>。</param> /// <param name="serviceType">给定的服务类型。</param> /// <param name="predicate">给定的断定工厂方法。</param> /// <param name="descriptor">输出 <see cref="ServiceDescriptor"/>。</param> /// <returns>返回是否成功获取的布尔值。</returns> public static bool TryGetSingle(this IServiceCollection services, Type serviceType, Func <ServiceDescriptor, bool> predicate, out ServiceDescriptor descriptor) { services.NotNull(nameof(services)); // 存在多个相同服务与实现类型的服务集合 descriptor = services.Where(GetPredicateDescriptor(serviceType)) .SingleOrDefault(predicate); return(descriptor.IsNotNull()); }