2014-07-16 20 views
5

Korumamız gereken bir API noktasına özgü bir HttpClient sarıcısı olan bir saplama projesini miras aldım. Amaç, bu çözümü nuget olarak API son noktasını tüketmesi gereken diğer .NET ekiplerine dağıtmaktır. - Autofac tel-up altında bir modül olarak baktığımızda Web API'sı için Autofaclı HttpClient sarıcı

sorumu tüketici bu yapardın şudur: Bu kurulum tabanını URI geçmek ve daha sonra GetPlayerInformation yöntemini erişmek için tüketici kolaylaştırmak nasıldır

var client = PlayersAPIHttpClientModule("http:/api.players.com"); 

?

Bu, çekirdek etki alanıyla paylaşılan arabirimdir.

public interface IPlayerDomainManager 
{ 
    IPlayer GetPlayerInformation (string playerId); 
} 

Ve bu, açıktaki yöntem işleviyle sınıfın kendisidir. AutoFac Module documentation tarif edildiği gibi

internal class PlayerDomainManager : IPlayerDomainManager 
{ 
    private readonly HttpClient _client; 

    private readonly IMappingEngine _mapper; 

    public PlayerDomainManager(HttpClient client, IMappingEngine mapper) 
    { 
     this._client = client; 
     this._mapper = mapper; 
    } 

    public IPlayer GetPlayerInformation(string playerId) 
    { 
     var response = this._client 
         .SendAsync 
          (new 
          HttpRequestMessage(HttpMethod.Get, 
          "/players/" + playerId), 
          CancellationToken.None) 
          .Result; 
    } 
} 

cevap

12

:

bir modül konfigürasyon ve dağıtımını kolaylaştırmak için bir 'cephe' arkasında ilgili bileşenlerin bir dizi paket kadar kullanılabilen bir küçük sınıf . Modül, modülü uygulamak için kullanılan bileşenlerinden bağımsız olarak değişiklik gösterebilen kasti, kısıtlı yapılandırma parametrelerini sunar. Örneğin bir alt sistemi temin

yapılandırma ile ilgili hizmetler: belgelerinde açıklandığı şekilde Modüllerin ortak kullanım örnekleri uyarınca

, ortak bir kullanım durumu için kodunuzu tabanı durumunda

NHibernate

ile veri erişim , PlayersAPIHttpClientModule IPlayerDomainManager uygulayan bir hizmet olarak PlayerDomainManager yapılandırılması ve bir singleton olarak hareket etmek ömrünü yapılandırıyor. Bunun avantajı, Modülün, PlayerDomainManager'ın (gömülü olanlardan biri tarafından talep edilen temel hizmet url'sinin), Modules yapıcısına merkezi olarak konfigüre edilmiş bir konfigürasyon olarak kaplanması için derin bir şekilde gömülü konfigürasyon gereksinimine izin vermesidir. Yapılandırma daha karmaşıksa, bu fayda daha açık olacaktır.

Modüller başka bağımlılık gereği AutoFac kayıtlı olması gerekir:

builder.RegisterModule(new PlayersAPIHttpClientModule("base_service_url));

Buna karşılık, onlar standart AutoFac bağımlılık çözünürlüğü kullanarak çözülmedi bölümü yapılandırmak hizmetler.

scope.Resolve<IDomainPlayerManager>();

Yani, soruyu cevaplamak için, hiçbir sorunuzun başına PlayersAPIHttpClientModule kullanmazdım.

  1. AutoFac ContainerBuilder
  2. Kullanım AutoFac ContainerIDomainPlayerManager gerektiği gibi
çözmek için birlikte PlayersAPIHttpClientModule Kayıt