using System; using System.Net.Http; using BirdsiteLive.Common.Settings; using BirdsiteLive.Common.Structs; using BirdsiteLive.DAL.Contracts; using BirdsiteLive.DAL.Postgres.DataAccessLayers; using BirdsiteLive.DAL.Postgres.Settings; using Lamar; using Lamar.Scanning.Conventions; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; namespace BSLManager { public class Bootstrapper { private readonly DbSettings _dbSettings; private readonly InstanceSettings _instanceSettings; #region Ctor public Bootstrapper(DbSettings dbSettings, InstanceSettings instanceSettings) { _dbSettings = dbSettings; _instanceSettings = instanceSettings; } #endregion public Container Init() { var container = new Container(x => { x.For().Use(x => _dbSettings); x.For().Use(x => _instanceSettings); if ( string.Equals( _dbSettings.Type, DbTypes.Postgres, StringComparison.OrdinalIgnoreCase ) ) { var connString = $"Host={_dbSettings.Host};Username={_dbSettings.User};Password={_dbSettings.Password};Database={_dbSettings.Name}"; var postgresSettings = new PostgresSettings { ConnString = connString }; x.For().Use(x => postgresSettings); x.For().Use().Singleton(); x.For().Use().Singleton(); x.For().Use().Singleton(); } else { throw new NotImplementedException($"{_dbSettings.Type} is not supported"); } var serviceProvider = new ServiceCollection() .AddHttpClient() .BuildServiceProvider(); x.For() .Use(_ => serviceProvider.GetService()); x.For(typeof(ILogger<>)).Use(typeof(DummyLogger<>)); x.Scan(_ => { _.Assembly("BirdsiteLive.Twitter"); _.Assembly("BirdsiteLive.Domain"); _.Assembly("BirdsiteLive.DAL"); _.Assembly("BirdsiteLive.DAL.Postgres"); _.Assembly("BirdsiteLive.Moderation"); _.TheCallingAssembly(); _.WithDefaultConventions(); _.LookForRegistries(); }); }); return container; } public class DummyLogger : ILogger { public void Log( LogLevel logLevel, EventId eventId, TState state, Exception exception, Func formatter ) { } public bool IsEnabled(LogLevel logLevel) { return false; } public IDisposable BeginScope(TState state) { return null; } } } }