如何通过Unity容器配置HttpClient?

cam*_*ior 8 .net c# unity-container asp.net-web-api

我正在尝试使用Unity容器注册HttpClient对象的实例,以便它可以在整个应用程序中使用,但遇到错误 - "类型HttpMessageHandler没有可访问的构造函数."

这是我用来向Unity注册HttpClient的代码 -

private static IUnityContainer BuildUnityContainer()
    {
        var container = new UnityContainer();

        container.RegisterType<HttpClient>(
            new InjectionProperty("BaseAddress", new Uri(ConfigurationManager.AppSettings["ApiUrl"]))); 

        return container;
    }
Run Code Online (Sandbox Code Playgroud)

Seb*_*ber 9

默认情况下,Unity使用具有最多参数的构造函数.那就是HttpClient(HttpMessageHandler, Boolean)你的情况.您需要明确指定无参数默认ctor.

container.RegisterType<HttpClient>(new InjectionProperty(...), new InjectionConstructor());
Run Code Online (Sandbox Code Playgroud)


jga*_*fin 8

您可以使用工厂方法来注册它:

container.RegisterType<HttpClient>(
    new InjectionFactory(x => 
        new HttpClient { BaseAddress = new Uri(ConfigurationManager.AppSettings["ApiUrl"]) }
    )
); 
Run Code Online (Sandbox Code Playgroud)

  • 这很好用,小错误是 BaseAddress 采用 Url 而不是字符串 (2认同)