C# 如何在.net core中为自动测试生成的构造函数注入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如下所示: 然后

所以,我尝试使用autorest创建一个rest客户机。生成的代码在构造函数params DelegatingHandler[]处理程序的参数中有一个DelegatingHandler数组

我以前从未与授权处理者合作过,也不知道如何注入他们。我怎么做


我们正在使用.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;
}