5

के लिए ऑटोफैक के साथ एचटीपी क्लाइंट रैपर मुझे एक स्टब प्रोजेक्ट मिला है जो एक एपीआई एनपॉइंट के लिए विशिष्ट एचटीपी क्लाइंट रैपर है जिसे हम बनाए रखते हैं। इसका उद्देश्य इस समाधान को अन्य .NET टीमों को वितरित करना है जिन्हें एपीआई एंडपॉइंट का उपभोग करने की आवश्यकता होगी। -वेब एपीआई

Autofac तार-अप के नीचे एक मॉड्यूल के रूप में को देखते हुए मेरे सवाल उपभोक्ता ऐसा करने देगी:

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

कैसे इस स्थापना उपभोक्ता की सुविधा है आधार यूआरआई पारित और फिर GetPlayerInformation विधि का उपयोग करने की ?

using Autofac; 
using AutoMapper; 
using Alpha.Domain.Players; 
using System.Net.Http; 

namespace Alpha.Clients.Players 
{ 
    public class PlayersAPIHttpClientModule : Module 
    { 
     private readonly string _serviceBaseUrl; 

     public PlayersAPIHttpClientModule(string serviceBaseUrl) 
     { 
      this._serviceBaseUrl = serviceBaseUrl; 
     } 

     protected override void Load(ContainerBuilder builder) 
     { 
      base.Load(builder); 

      builder.Register(ctx => 
      { 
       var serviceClient = new HttpClient 
       { 
        BaseAddress = 
        new System.Uri(this._serviceBaseUrl) 
       }; 

       return new 
       PlayerDomainManager(serviceClient, 
            ctx.Resolve<IMappingEngine>()); 
      }) 
       .SingleInstance() 
       .As<IPlayerDomainManager>(); 
     } 
    } 
} 

यह कोर डोमेन के साथ साझा इंटरफ़ेस है।

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

और यह स्वयं ही उजागर विधि कार्यक्षमता के साथ वर्ग है।

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; 
    } 
} 

उत्तर

12

AutoFac Module documentation में वर्णित है:

एक मॉड्यूल एक छोटा सा वर्ग है कि एक 'मुखौटा' के पीछे संबंधित घटकों का एक सेट अप बंडल करने को आसान बनाने के विन्यास और तैनाती इस्तेमाल किया जा सकता है । मॉड्यूल कॉन्फ़िगरेशन पैरामीटर के एक जानबूझकर, प्रतिबंधित सेट का खुलासा करता है जो मॉड्यूल को लागू करने के लिए उपयोग किए गए घटकों से स्वतंत्र रूप से भिन्न हो सकता है।

कॉन्फ़िगर संबंधित सेवाओं है कि एक उपतंत्र, उदा प्रदान करते हैं:

मॉड्यूल के सामान्य उपयोग के मामलों दस्तावेज़ में वर्णित के अनुसार, एक का उपयोग आम तौर है NHibernate

साथ डेटा का उपयोग अपने कोड बेस के मामले में, PlayersAPIHttpClientModule एक सेवा है जो IPlayerDomainManager लागू करता है के रूप में PlayerDomainManager विन्यस्त और एक सिंगलटन के रूप में कार्य करने के लिए अपने जीवन को विन्यस्त कर रहा है। लाभ यह है कि मॉड्यूल मॉड्यूलर कन्स्ट्रक्टर को केंद्रीकृत कॉन्फ़िगरेशन के रूप में सामने आने के लिए प्लेयरडोमेन मैनेजर (आधार सेवा यूआरएल जो बदले में इसकी एक निर्भरता द्वारा आवश्यक है) की गहरी दफन कॉन्फ़िगरेशन आवश्यकता की अनुमति देता है। कॉन्फ़िगरेशन अधिक जटिल होने पर यह लाभ अधिक स्पष्ट होगा।

मॉड्यूल किसी अन्य निर्भरता के अनुसार AutoFac के साथ पंजीकृत होना चाहिए:

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

बारी में, सेवाओं वे कॉन्फ़िगर मानक AutoFac निर्भरता संकल्प का उपयोग कर हल कर रहे हैं।

scope.Resolve<IDomainPlayerManager>();

तो, आपके सवाल का जवाब देना, कोई आप PlayersAPIHttpClientModule अपने प्रश्न प्रति के रूप में उपयोग नहीं होता।

  1. AutoFac ContainerBuilder
  2. उपयोग AutoFac ContainerIDomainPlayerManager के रूप में आवश्यक
हल करने रजिस्टर के साथ PlayersAPIHttpClientModule