Client Configuration - DI Container
Caution
Examples in this article could contain API token specified as a plain text in code or configuration files.
This is not a recommended approach and is used only for brevity.
In production scenarios it is highly recommended to use more secure approaches to store sensitive configuration, such as:
When using hosting model from MS, Mailtrap API client uses Options Pattern for configuration under the hood.
Any of available approaches to configure IOptions<MailtrapClientOptions>
in the DI container can be used and client will consume them.
Meanwhile, library provides few handy shortcut extensions to simplify configuring Mailtrap API client in IServiceCollection.
Configuration with IConfiguration abstraction
Hosting model supports a number of configuration providers out-of-the-box:
- configuration files
- environment variables
- command line arguments
- etc.
More details can be found here
Assuming the following Mailtrap configuration in appsettings.json
"Mailtrap": {
"ApiToken": "<API_TOKEN>",
"UseBulkApi": true
}
Then section from configuration can be loaded and used to configure Mailtrap API client with it:
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Mailtrap;
...
// Creating host builder with defaults
HostApplicationBuilder hostBuilder = Host.CreateApplicationBuilder(args);
// Loading configuration section
IConfigurationSection config = hostBuilder.Configuration.GetSection("Mailtrap");
// Adding Mailtrap API client to the container
hostBuilder.Services.AddMailtrapClient(config);
// Building the host
IHost host = hostBuilder.Build();
Alternatively, more granular configuration flow can be used:
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options;
using Mailtrap;
...
// Creating host builder with defaults
HostApplicationBuilder hostBuilder = Host.CreateApplicationBuilder(args);
// Loading configuration section
IConfigurationSection config = hostBuilder.Configuration.GetSection("Mailtrap");
// Configuring client options
hostBuilder.Services.Configure<MailtrapClientOptions>(config);
// Do any additional custom configuration, overrides, etc.
hostBuilder.Services.PostConfigure<MailtrapClientOptions>(options =>
{
options.ApiToken = Environment.GetEnvironmentVariable("MAILTRAP_TOKEN");
});
// Adding Mailtrap API client core services to the container
// This won't add nor configure HttpClient, thus it has to be done separately
hostBuilder.Services.AddMailtrapServices();
// Adding and optionally configuring HttpClient
hostBuilder.Services
.AddHttpClient("Mailtrap")
.AddStandardResilienceHandler()
.AddExtendedHttpClientLogging();
// Building the host
IHost host = hostBuilder.Build();
Configuration with delegate
Mailtrap API client settings can be set up programmatically, using extension overload accepting configuration delegate:
using Microsoft.Extensions.Hosting;
using Mailtrap;
...
// Creating host builder with defaults
HostApplicationBuilder hostBuilder = Host.CreateApplicationBuilder(args);
// Adding Mailtrap API client to the container
hostBuilder.Services.AddMailtrapClient((MailtrapClientOptions options) =>
{
options.ApiToken = "<API_TOKEN>";
options.PrettyJson = true;
});
// Building the host
IHost host = hostBuilder.Build();
Configuration with MailtrapClientOptions instance
Similarly to the previous section, configuration can be done by passing pre-created instance of MailtrapClientOptions:
using Microsoft.Extensions.Hosting;
using Mailtrap;
...
// Creating host builder with defaults
HostApplicationBuilder hostBuilder = Host.CreateApplicationBuilder(args);
// Creating new instance of `MailtrapClientOptions`
var config = new MailtrapClientOptions("<API_TOKEN>")
{
InboxId = 4321
};
// Adding Mailtrap API client to the container
hostBuilder.Services.AddMailtrapClient(config);
// Building the host
IHost host = hostBuilder.Build();
Advanced HttpClient configuration
All AddMailtrapClient
extension method overloads return IHttpClientBuilder instance.
Thus a fine-grain tuning of the HttpClient configuration can be done:
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Mailtrap;
...
// Creating host builder with defaults
HostApplicationBuilder hostBuilder = Host.CreateApplicationBuilder(args);
// Loading configuration section
IConfigurationSection config = hostBuilder.Configuration.GetSection("Mailtrap");
// Adding Mailtrap API client to the container
IHttpClientBuilder httpClientBuilder = hostBuilder.Services.AddMailtrapClient(config);
// Do any required HttpClient configuration
// httpClientBuilder.AddStandardResilienceHandler();
// etc.
// Building the host
IHost host = hostBuilder.Build();
What's next
Additional examples for client configuration within DI container can be found on GitHub
Various client usage examples and recipes can be found in Cookbook.
Also a bunch of examples is available in the Source Repository.
Detailed API reference is available here.