
csharp-netcore.libraries.generichost.HostConfiguration.mustache Maven / Gradle / Ivy
{{>partial_header}}
{{#nrt}}
#nullable enable
{{/nrt}}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Net.Http;
using Microsoft.Extensions.DependencyInjection;
using {{packageName}}.{{modelPackage}};
namespace {{packageName}}.{{clientPackage}}
{
///
/// Provides hosting configuration for {{packageName}}
///
{{>visibility}} class HostConfiguration<{{#apiInfo}}{{#apis}}T{{classname}}{{^-last}}, {{/-last}}{{/apis}}{{/apiInfo}}>
{{#apiInfo}}
{{#apis}}
where T{{classname}} : class, {{interfacePrefix}}{{apiPackage}}.{{interfacePrefix}}{{classname}}
{{/apis}}
{{/apiInfo}}
{
private readonly IServiceCollection _services;
private readonly JsonSerializerOptions _jsonOptions = new JsonSerializerOptions();
internal bool HttpClientsAdded { get; private set; }
///
/// Instantiates the class
///
///
public HostConfiguration(IServiceCollection services)
{
_services = services;
_jsonOptions.Converters.Add(new JsonStringEnumConverter());
_jsonOptions.Converters.Add(new DateTimeJsonConverter());
_jsonOptions.Converters.Add(new DateTimeNullableJsonConverter());
{{#models}}
{{#model}}
{{#isEnum}}
_jsonOptions.Converters.Add(new {{datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}Converter());
_jsonOptions.Converters.Add(new {{datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}NullableConverter());
{{/isEnum}}
{{^isEnum}}
_jsonOptions.Converters.Add(new {{classname}}JsonConverter());
{{/isEnum}}
{{/model}}
{{/models}}
_services.AddSingleton(new JsonSerializerOptionsProvider(_jsonOptions));
_services.AddSingleton();{{#apiInfo}}{{#apis}}
_services.AddTransient();{{/apis}}{{/apiInfo}}
}
///
/// Configures the HttpClients.
///
///
///
///
public HostConfiguration<{{#apiInfo}}{{#apis}}T{{classname}}{{^-last}}, {{/-last}}{{/apis}}{{/apiInfo}}> Add{{apiName}}HttpClients
(
Action{{nrt?}} client = null, Action{{nrt?}} builder = null)
{
if (client == null)
client = c => c.BaseAddress = new Uri(ClientUtils.BASE_ADDRESS);
List builders = new List();
{{#apiInfo}}{{#apis}}builders.Add(_services.AddHttpClient<{{interfacePrefix}}{{apiPackage}}.{{interfacePrefix}}{{classname}}, T{{classname}}>(client));
{{/apis}}{{/apiInfo}}
if (builder != null)
foreach (IHttpClientBuilder instance in builders)
builder(instance);
HttpClientsAdded = true;
return this;
}
///
/// Configures the JsonSerializerSettings
///
///
///
public HostConfiguration<{{#apiInfo}}{{#apis}}T{{classname}}{{^-last}}, {{/-last}}{{/apis}}{{/apiInfo}}> ConfigureJsonOptions(Action options)
{
options(_jsonOptions);
return this;
}
///
/// Adds tokens to your IServiceCollection
///
///
///
///
public HostConfiguration<{{#apiInfo}}{{#apis}}T{{classname}}{{^-last}}, {{/-last}}{{/apis}}{{/apiInfo}}> AddTokens(TTokenBase token) where TTokenBase : TokenBase
{
return AddTokens(new TTokenBase[]{ token });
}
///
/// Adds tokens to your IServiceCollection
///
///
///
///
public HostConfiguration<{{#apiInfo}}{{#apis}}T{{classname}}{{^-last}}, {{/-last}}{{/apis}}{{/apiInfo}}> AddTokens(IEnumerable tokens) where TTokenBase : TokenBase
{
TokenContainer container = new TokenContainer(tokens);
_services.AddSingleton(services => container);
return this;
}
///
/// Adds a token provider to your IServiceCollection
///
///
///
///
public HostConfiguration<{{#apiInfo}}{{#apis}}T{{classname}}{{^-last}}, {{/-last}}{{/apis}}{{/apiInfo}}> UseProvider()
where TTokenProvider : TokenProvider
where TTokenBase : TokenBase
{
_services.AddSingleton();
_services.AddSingleton>(services => services.GetRequiredService());
return this;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy