2013-02-04 3 views
5

HttpClient 개체의 인스턴스를 유니티 컨테이너에 등록하려고합니다. 앱 전체에서 사용할 수 있지만 "HttpMessageHandler 유형에는 액세스 가능한 생성자가 없습니다."라는 오류가 발생합니다. 여기 Unity 컨테이너를 통해 HttpClient를 구성하는 방법은 무엇입니까?

내가 유니티는 대부분의 매개 변수와 생성자를 사용하여 기본적으로 Unity-

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

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

     return container; 
    } 
+0

분명히 단결을 만들려고합니다'HttpClient' 사용하여'HttpClient를 (HttpMessageHandler)'또는'HttpClient를 (HttpMessageHandler, 부울)' 건설자. 'HttpMessageHandler'는 추상 클래스이므로 인스턴스를 생성 할 수 없습니다. – dtb

답변

4

대신에 등록하는 팩토리 메소드를 사용할 수 있습니다

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

이 훌륭한, 사소한 실수는 BaseAddress가 문자열 대신 URL을 사용한다는 것입니다. – camelCaseWarrior

9

으로 HttpClient를 등록하는 데 사용하는 코드입니다. 귀하의 경우에는 HttpClient(HttpMessageHandler, Boolean)이됩니다. 매개 변수없는 기본 ctor를 명시 적으로 지정해야합니다.

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

잘 알아두면 효과가있었습니다. DefaultRequestHeaders에이 InjectionProperty/InjectionConstructor 스타일 구성을 어떻게 추가할까요? InjectionFactory로 할 수있었습니다. – camelCaseWarrior

+0

@RubberDuckDuck 원하는 경우 여러 개의 'InjectionProoperties'를 추가 할 수 있습니다. 그리고 InjectionConstructor에도 매개 변수를 추가 할 수 있습니다. 생성자가 올바른 순서로 취하는 모든 매개 변수를 추가해야합니다. 컨테이너가 이러한 매개 변수 중 일부를 해결하기를 원할 경우, 일종의 와일드 카드로'Type' 매개 변수를 추가 할 수 있습니다. –

관련 문제