68 lines
2.8 KiB
C#
68 lines
2.8 KiB
C#
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using ViewEngine.Client.Configuration;
|
|
|
|
namespace ViewEngine.Client.Extensions;
|
|
|
|
/// <summary>
|
|
/// Extension methods for registering ViewEngine client services
|
|
/// </summary>
|
|
public static class ServiceCollectionExtensions
|
|
{
|
|
/// <summary>
|
|
/// Adds ViewEngine client services to the dependency injection container
|
|
/// </summary>
|
|
/// <param name="services">The service collection</param>
|
|
/// <param name="configuration">The configuration</param>
|
|
/// <returns>The service collection for chaining</returns>
|
|
public static IServiceCollection AddViewEngineClient(this IServiceCollection services, IConfiguration configuration)
|
|
{
|
|
// Bind configuration
|
|
services.Configure<ViewEngineOptions>(configuration.GetSection(ViewEngineOptions.SectionName));
|
|
|
|
// Register the client as a typed HttpClient
|
|
services.AddHttpClient<ViewEngineClient>((serviceProvider, httpClient) =>
|
|
{
|
|
var options = configuration.GetSection(ViewEngineOptions.SectionName).Get<ViewEngineOptions>()
|
|
?? throw new InvalidOperationException("ViewEngine configuration is missing");
|
|
|
|
if (string.IsNullOrWhiteSpace(options.ApiKey))
|
|
throw new InvalidOperationException("ViewEngine API key is required");
|
|
|
|
httpClient.BaseAddress = new Uri(options.BaseUrl);
|
|
httpClient.Timeout = TimeSpan.FromSeconds(options.TimeoutSeconds);
|
|
httpClient.DefaultRequestHeaders.Add("X-API-Key", options.ApiKey);
|
|
});
|
|
|
|
return services;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Adds ViewEngine client services to the dependency injection container with custom configuration
|
|
/// </summary>
|
|
/// <param name="services">The service collection</param>
|
|
/// <param name="configureOptions">Action to configure options</param>
|
|
/// <returns>The service collection for chaining</returns>
|
|
public static IServiceCollection AddViewEngineClient(this IServiceCollection services, Action<ViewEngineOptions> configureOptions)
|
|
{
|
|
// Configure options
|
|
services.Configure(configureOptions);
|
|
|
|
// Register the client as a typed HttpClient
|
|
services.AddHttpClient<ViewEngineClient>((serviceProvider, httpClient) =>
|
|
{
|
|
var options = new ViewEngineOptions();
|
|
configureOptions(options);
|
|
|
|
if (string.IsNullOrWhiteSpace(options.ApiKey))
|
|
throw new InvalidOperationException("ViewEngine API key is required");
|
|
|
|
httpClient.BaseAddress = new Uri(options.BaseUrl);
|
|
httpClient.Timeout = TimeSpan.FromSeconds(options.TimeoutSeconds);
|
|
httpClient.DefaultRequestHeaders.Add("X-API-Key", options.ApiKey);
|
|
});
|
|
|
|
return services;
|
|
}
|
|
}
|