示例#1
0
        /// <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());
        }