using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using MyHN.Application; using MyHN.Domain; using MediatR; using MyHN.Infrastructure.Repositories; using System; namespace MyHN.Infrastructure { public class MyHNServicesBuilder { private readonly IServiceCollection _services; public MyHNServicesBuilder(IServiceCollection services) { _services = services; } /// /// Enregistre un service pour fournir l'utilisateur connecté à la plateforme. /// /// public void AddUserProvider() where TUserProvider : class, IUserProvider { _services.AddScoped(); } } public static class ServiceCollectionExtensions { /// /// Ajoute les services nécessaires à la gestion de la plateforme de liens. /// /// /// /// public static MyHNServicesBuilder AddMyHNServices( this IServiceCollection services , IConfiguration configuration) { services.AddDbContext(options => options.UseSqlite(configuration.GetOrParseConnectionString())); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddMediatR(typeof(CreateLinkCommand)); return new MyHNServicesBuilder(services); } private static string GetOrParseConnectionString(this IConfiguration configuration) { // Since it will be defined as an uri from heroku... var envVar = Environment.GetEnvironmentVariable("DATABASE_URL"); if (string.IsNullOrWhiteSpace(envVar)) { return configuration.GetConnectionString("Default"); } var uri = new Uri(envVar); var userInfo = uri.UserInfo.Split(':'); return $"Host={uri.Host};Port={uri.Port};Database={uri.AbsolutePath.Substring(1)};Username={userInfo[0]};Password={userInfo[1]}"; } } }