/// <summary> /// 添加token应用的http消息处理程序 /// </summary> /// <typeparam name="TOAuthTokenHandler"></typeparam> /// <param name="builder"></param> /// <param name="handlerFactory">hanlder的创建委托</param> /// <param name="tokenProviderSearchMode">token提供者的查找模式</param> /// <returns></returns> public static IHttpClientBuilder AddOAuthTokenHandler <TOAuthTokenHandler>(this IHttpClientBuilder builder, Func <IServiceProvider, ITokenProvider, TOAuthTokenHandler> handlerFactory, TypeMatchMode tokenProviderSearchMode = TypeMatchMode.TypeOrBaseTypes) where TOAuthTokenHandler : OAuthTokenHandler { var httpApiType = builder.GetHttpApiType(); if (httpApiType == null) { throw new InvalidOperationException($"无效的{nameof(IHttpClientBuilder)},找不到其关联的http接口类型"); } return(builder.AddHttpMessageHandler(serviceProvider => { var factory = serviceProvider.GetRequiredService <ITokenProviderFactory>(); var tokenProvider = factory.Create(httpApiType, tokenProviderSearchMode); return handlerFactory(serviceProvider, tokenProvider); })); }