public async Task Start() { _logger.LogInformation("Starting Theorem..."); // Load configuration _logger.LogInformation("Loading configuration data..."); Configuration = new ConfigurationBuilder() .AddJsonFile("appsettings.default.json") .AddJsonFile("appsettings.json", optional: true) .AddEnvironmentVariables() .Build(); // TODO: Allow configuring logger from configuration var loggerFactory = LoggerFactory.Create(builder => { builder .SetMinimumLevel(LogLevel.Debug) .AddConsole(); }); // Register dependencies var containerBuilder = new ContainerBuilder(); containerBuilder.RegisterInstance(Configuration).As <IConfigurationRoot>(); // Logging containerBuilder .RegisterInstance(loggerFactory) .As <ILoggerFactory>() .SingleInstance(); containerBuilder .RegisterGeneric(typeof(Logger <>)) .As(typeof(ILogger <>)) .SingleInstance(); // Middleware registerMiddleware(containerBuilder); // Chat service providers registerChatServiceConnections(containerBuilder); // Register MiddlewarePipeline registerMiddlewarePipeline(containerBuilder); // Construct IoC container _iocContainer = containerBuilder.Build(); using (var scope = _iocContainer.BeginLifetimeScope()) { // Connect to chat providers! var chatServices = scope.Resolve <IEnumerable <IChatServiceConnection> >(); await Task.WhenAll( chatServices.Select(c => TaskUtilities.ExpontentialRetryAsync( c.StartAsync, (e, r) => onChatServiceConnectionInterruption(c, e, r))) ); } }
public EzFtlStreamAnnouncementMiddleware(ILogger <EzFtlStreamAnnouncementMiddleware> logger, ConfigurationSection configuration, IEnumerable <IChatServiceConnection> chatServiceConnections) { _logger = logger; _configuration = configuration; _chatServiceConnections = chatServiceConnections; _logger.LogInformation("Starting EzFtlStreamAnnouncement Middleware..."); subscribeToChatServiceConnectedEvents(); TaskUtilities .ExpontentialRetryAsync(startEzFtlConnection, onConnectionInterrupted) .FireAndForget(); }