我正在尝试使用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;
}
答案 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"]) }
)
);