private Source(int id, string address, Enums.Environment environment, bool deleted) { Id = id; Address = address; Environment = environment; Deleted = deleted; }
public static Source Create(int id, string address, Enums.Environment environment) { if (String.IsNullOrEmpty(address)) { throw new ArgumentNullException(); } var deleted = false; return(new Source(id, address, environment, deleted)); }
/// <summary> /// MpesaClient that creates a client using httpclientfactory /// </summary> /// <param name="client">HttpClient Instance from httpClientFactory</param> public MpesaClient(Enums.Environment environment) { var retryPolicy = HttpPolicyExtensions.HandleTransientHttpError() .WaitAndRetryAsync(1, retryAttempt => { return(TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)) + TimeSpan.FromMilliseconds(jitterer.Next(0, 100))); }); var noOpPolicy = Policy.NoOpAsync().AsAsyncPolicy <HttpResponseMessage>(); var services = new ServiceCollection(); services.AddHttpClient("MpesaApiClient", client => { switch (environment) { case Enums.Environment.Sandbox: client.BaseAddress = MpesaRequestEndpoint.SandboxBaseAddress; client.Timeout = TimeSpan.FromMinutes(10); break; case Enums.Environment.Live: client.BaseAddress = MpesaRequestEndpoint.LiveBaseAddress; client.Timeout = TimeSpan.FromMinutes(10); break; default: break; } }).ConfigurePrimaryHttpMessageHandler(messageHandler => { var handler = new HttpClientHandler(); if (handler.SupportsAutomaticDecompression) { handler.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip; } return(handler); }).AddPolicyHandler(request => request.Method.Equals(HttpMethod.Get) ? retryPolicy : noOpPolicy); var serviceProvider = services.BuildServiceProvider(); var httpClientFactory = serviceProvider.GetService <IHttpClientFactory>(); _client = httpClientFactory.CreateClient("MpesaApiClient"); }
/// <summary> /// Creating a mpesa service collection to be used in projects that support dependency injection. /// </summary> /// <param name="services"></param> public static void AddMpesaService(this IServiceCollection services, Enums.Environment environment) { Random jitterer = new Random(); var retryPolicy = HttpPolicyExtensions.HandleTransientHttpError() .WaitAndRetryAsync(1, retryAttempt => { return(TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)) + TimeSpan.FromMilliseconds(jitterer.Next(0, 100))); }); var noOpPolicy = Policy.NoOpAsync().AsAsyncPolicy <HttpResponseMessage>(); services.AddHttpClient <IMpesaClient, MpesaClient>(options => { switch (environment) { case Enums.Environment.Sandbox: options.BaseAddress = MpesaRequestEndpoint.SandboxBaseAddress; options.Timeout = TimeSpan.FromMinutes(10); break; case Enums.Environment.Live: options.BaseAddress = MpesaRequestEndpoint.LiveBaseAddress; options.Timeout = TimeSpan.FromMinutes(10); break; default: break; } }).ConfigurePrimaryHttpMessageHandler(messageHandler => { var handler = new HttpClientHandler(); if (handler.SupportsAutomaticDecompression) { handler.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip; } return(handler); }).AddPolicyHandler(request => request.Method.Equals(HttpMethod.Get) ? retryPolicy : noOpPolicy); }
/// <summary> /// Creating a mpesa service collection with http handler to be used in projects that support dependency injection. /// </summary> /// Type parameter THandler to pass native implementations of HttpmessageHandler /// <param name="services"></param> public static void AddMpesaService <THandler>(this IServiceCollection services, Enums.Environment environment) where THandler : HttpMessageHandler { Random jitterer = new Random(); var retryPolicy = HttpPolicyExtensions.HandleTransientHttpError() .WaitAndRetryAsync(1, retryAttempt => { return(TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)) + TimeSpan.FromMilliseconds(jitterer.Next(0, 100))); }); var noOpPolicy = Policy.NoOpAsync().AsAsyncPolicy <HttpResponseMessage>(); services.AddHttpClient <IMpesaClient, MpesaClient>(options => { switch (environment) { case Enums.Environment.Sandbox: options.BaseAddress = MpesaRequestEndpoint.SandboxBaseAddress; options.Timeout = TimeSpan.FromMinutes(10); break; case Enums.Environment.Live: options.BaseAddress = MpesaRequestEndpoint.LiveBaseAddress; options.Timeout = TimeSpan.FromMinutes(10); break; default: break; } }) .SetHandlerLifetime(Timeout.InfiniteTimeSpan) .ConfigurePrimaryHttpMessageHandler <THandler>() .AddPolicyHandler(request => request.Method.Equals(HttpMethod.Get) ? retryPolicy : noOpPolicy); }
/// <summary> /// Initializes a new instance of the <see cref="ServiceFactory"/> class. /// </summary> /// <param name="environment">The environment.</param> /// <param name="configureAwait">The value used for <see cref="Task.ConfigureAwait"/> method.</param> public ServiceFactory(Environment environment, bool configureAwait = false) { _environment = environment; _configureAwait = configureAwait; }