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]}";
}
}
}