2013-02-04 28 views
5

Tôi đang cố gắng đăng ký một thể hiện của đối tượng HttpClient với thùng chứa thống nhất để nó có thể được sử dụng trong suốt ứng dụng, nhưng chạy vào lỗi - "Loại HttpMessageHandler không có một hàm tạo truy cập."Làm thế nào để cấu hình HttpClient qua container Unity?

Đây là mã tôi sử dụng để đăng ký HttpClient với Unity-

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

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

     return container; 
    } 
+0

Rõ ràng Unity cố gắng để tạo ra các 'HttpClient' bằng cách sử dụng' HttpClient (HttpMessageHandler) 'hoặc' HttpClient (HttpMessageHandler, Boolean) ' constructor. 'HttpMessageHandler' là một lớp trừu tượng, vì vậy nó không thể tạo ra một thể hiện của nó. – dtb

Trả lời

4

Bạn có thể sử dụng phương pháp nhà máy để đăng ký nó thay vì:

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

Điều này làm việc lớn, sai lầm nhỏ là BaseAddress mất trong Url thay vì chuỗi – camelCaseWarrior

9

Theo mặc định Unity sử dụng các nhà xây dựng với các thông số nhất. Đó sẽ là HttpClient(HttpMessageHandler, Boolean) trong trường hợp của bạn. Bạn cần xác định rõ ràng ctor mặc định parameterless.

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

Điều cần biết và đã hoạt động. Làm thế nào chúng ta có thể thêm DefaultRequestHeaders với kiểu dáng InjectionProperty/InjectionConstructor này để cấu hình? Với InjectionFactory nó đã làm được. – camelCaseWarrior

+0

@RubberDuckDuck Bạn có thể thêm nhiều 'InjectionProoperties' nếu muốn. Và bạn cũng có thể thêm tham số vào 'InjectionConstructor'. Bạn phải thêm tất cả các tham số mà hàm tạo đưa vào đúng thứ tự. Nếu bạn muốn các container để giải quyết một số các tham số bạn có thể thêm các tham số 'Type' như một loại ký tự đại diện. –

Các vấn đề liên quan