13

我正在尝试使用统一容器注册 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;
    }
4

2 回答 2

11

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

container.RegisterType<HttpClient>(
    new InjectionFactory(x => 
        new HttpClient { BaseAddress = new Uri(ConfigurationManager.AppSettings["ApiUrl"]) }
    )
); 
于 2013-02-05T08:30:42.420 回答
9

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

container.RegisterType<HttpClient>(new InjectionProperty(...), new InjectionConstructor());
于 2013-02-05T08:14:33.760 回答