Skip to content
Snippets Groups Projects
DiContainer.cs 1.55 KiB
Newer Older
using System.Net;
using Autofac;
using FitConnect.Services;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;

namespace FitConnect;

public static class DiContainer {
Klaus Fischer's avatar
Klaus Fischer committed
    private static IContainer? _container;
    public static IWebProxy? WebProxy { get; set; }
    public static void DisposeContainer() {
        _container?.Dispose();
        _container = null;
    }

    public static IContainer GetContainer(FitConnectEnvironment environment,
Klaus Fischer's avatar
Klaus Fischer committed
        ILogger? logger = null) {
        return _container ??= BuildContainer(environment, logger);

    private static IContainer
        BuildContainer(FitConnectEnvironment environment,
            ILogger? logger = null) {
        var builder = new ContainerBuilder();

        if (logger == null)
            logger = NullLoggerFactory.Instance.CreateLogger("FitConnect");

        builder.RegisterInstance(environment).As<FitConnectEnvironment>();
        builder.RegisterInstance(logger).As<ILogger>();

        builder.Register(c => new OAuthService(environment.TokenUrl)).As<IOAuthService>();
        builder.Register(c => new SubmissionService(environment.SubmissionUrl[0]))
            .As<ISubmissionService>();
        builder.Register(c => new DestinationService(environment.SubmissionUrl[0]))
            .As<IDestinationService>();
        builder.Register(c => new CasesService(environment.SubmissionUrl[0]))
            .As<ICasesService>();
        builder.Register(c => new RouteService(environment.RoutingUrl)).As<IRouteService>();

        return builder.Build();
    }
}