2013-02-04 41 views
5

HttpClient nesnesinin bir örneğini birleştirme kabı ile kaydetmeye çalışıyorum, böylece uygulama boyunca kullanılabilir, ancak hatayı çalıştırarak - "HttpMessageHandler'ın erişilebilir bir kurucusu yok." İşte HttpClient Unity konteyner üzerinden nasıl yapılandırılır?

Ben Unity en parametrelerle yapıcısı kullanılır Varsayılan olarak Unity-

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

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

     return container; 
    } 
+0

Görünüşe Birlik oluşturmaya çalışır 'HttpClient' kullanarak' HttpClient (HttpMessageHandler) 'veya' HttpClient (HttpMessageHandler, Boolean) ' yapıcı. 'HttpMessageHandler' soyut bir sınıftır, bu yüzden bir örneği oluşturamaz. – dtb

cevap

4

yerine kaydetmek için fabrika yöntemi kullanabilirsiniz:

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

Bu işe yaradı, küçük bir hata, BaseAddress'in dize yerine Url'yi almasıdır – camelCaseWarrior

9

ile httpclient kayıt için kullandığınız koddur. Durumunuzda bu HttpClient(HttpMessageHandler, Boolean) olacaktır. Parametless varsayılan ctor'u açık bir şekilde belirtmeniz gerekir.

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

Bilmek güzel ve işe yaradı. DefaultRequestHeaders'ı bu InjectionProperty/InjectionConstructor yapılandırması stiliyle nasıl eklerdik? InjectionFactory ile yapabildi. – camelCaseWarrior

+0

@RubberDuckDuck İsterseniz çoklu 'InjectionProoperties' ekleyebilirsiniz. Ve 'InjectionConstructor' için de parametreler ekleyebilirsiniz. Kurucunun doğru sırayla alması gereken tüm parametreleri eklemelisiniz. Kapsayıcının bu parametrelerin bazılarını çözmesini istiyorsanız, 'Tür' parametrelerini bir çeşit joker karakter olarak ekleyebilirsiniz. –