Files
fiscalos/src/FiscalOS.Infra/DependencyInjection/ServiceCollectionExtensions.cs
T

40 lines
1.5 KiB
C#
Raw Normal View History

namespace FiscalOS.Infra.DependencyInjection;
public static class ServiceCollectionExtensions
{
public static IServiceCollection AddInfrastructure(this IServiceCollection services)
{
services.AddSingleton<IAuthorizationMiddlewareResultHandler, ProblemDetailsAuthResultHandler>();
2026-02-12 20:48:49 -06:00
services.AddHttpClient();
services.AddSingleton(TimeProvider.System);
2026-02-06 06:46:01 -06:00
services.AddSingleton<IFileSystem, FileSystem>();
services.ConfigureOptions<JwtOptionsSetup>();
services.ConfigureOptions<JwtBearerOptionsSetup>();
2026-02-06 06:46:01 -06:00
services.AddSingleton<ITokenGenerator>(TokenGenerator.From);
services.AddSingleton<IPasswordHasher>(PasswordHasher.From);
services.ConfigureOptions<FileKeyRingOptionsSetup>();
services.AddSingleton<IKeyRing>(FileKeyRing.From);
services.AddSingleton<IEncryptor>(Encryptor.From);
services.ConfigureOptions<AppDbContextOptionsSetup>();
services.AddDbContext<AppDbContext>();
services.AddHostedService<MigrationService>();
2026-02-12 20:48:49 -06:00
services.ConfigureOptions<PlaidClientOptionsSetup>();
services.AddSingleton(static sp =>
{
var factory = sp.GetRequiredService<IHttpClientFactory>();
var logger = sp.GetRequiredService<ILogger<PlaidClient>>();
var clientOptions = sp.GetRequiredService<IOptions<PlaidClientOptions>>();
var options = clientOptions.Value.ToPlaidOptions();
return new PlaidClient(options, factory, logger);
});
services.AddSingleton(PlaidService.From);
return services;
}
}