C# 如何在.net core中为自动测试生成的构造函数注入DelegatingHandler数组
所以,我尝试使用autorest创建一个rest客户机。生成的代码在构造函数params DelegatingHandler[]处理程序的参数中有一个DelegatingHandler数组 我以前从未与授权处理者合作过,也不知道如何注入他们。我怎么做C# 如何在.net core中为自动测试生成的构造函数注入DelegatingHandler数组,c#,rest,dependency-injection,.net-core,autorest,C#,Rest,Dependency Injection,.net Core,Autorest,所以,我尝试使用autorest创建一个rest客户机。生成的代码在构造函数params DelegatingHandler[]处理程序的参数中有一个DelegatingHandler数组 我以前从未与授权处理者合作过,也不知道如何注入他们。我怎么做 我们正在使用.net core 1.1,并在Startup.cs中使用ConfigureServices方法注入依赖项。这是一个非常古老的问题,但我碰巧知道答案 按如下方式创建您的HttpClient: CreatePipeline如下所示: 然后
我们正在使用.net core 1.1,并在Startup.cs中使用ConfigureServices方法注入依赖项。这是一个非常古老的问题,但我碰巧知道答案 按如下方式创建您的HttpClient: CreatePipeline如下所示:
然后,您只需创建一个由DefaultHandlerFactory处理的HttpClientHandler,就可以很容易地创建新的HttpClientHandler。您需要注入它们吗?它们被用来代理HttpMessageInvoker,这样你就可以做一些事情,比如记录传出的请求——所以它们只是附加的,它们彼此包装,并沿着链传递消息。params[]可以是空的,如中所示,您实际上不必传递任何内容来编译它。我不知道,谢谢!:我不确定如何将客户机服务添加到没有参数的服务中,但现在我会弄清楚它可以是空的。
this.httpHandler = CreatePipeline(handlers);
this.httpClient = new HttpClient(httpHandler);
private static HttpMessageHandler CreatePipeline(IEnumerable<HttpMessageHandler> handlers)
{
HttpMessageHandler pipeline = handlers.LastOrDefault() ?? DefaultHandlerFactory();
if (pipeline is DelegatingHandler dHandler && dHandler.InnerHandler == null)
{
dHandler.InnerHandler = DefaultHandlerFactory();
pipeline = dHandler;
}
// Wire handlers up in reverse order
IEnumerable<HttpMessageHandler> reversedHandlers = handlers.Reverse().Skip(1);
foreach (HttpMessageHandler handler in reversedHandlers)
{
dHandler = handler as DelegatingHandler;
if (dHandler == null)
{
throw new ArgumentException($"bad handler", nameof(handlers));
}
dHandler.InnerHandler = pipeline;
pipeline = dHandler;
}
return pipeline;
}