如何通过Unity容器配置HttpClient?

时间:2013-02-04 22:37:33

标签: c# .net 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;
    }

2 个答案:

答案 0 :(得分:9)

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

container.RegisterType<HttpClient>(new InjectionProperty(...), new InjectionConstructor());

答案 1 :(得分:7)

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

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