public static int Main(string[] args) { // Create servicecollection with di services var services = new ServiceCollection() .AddSingleton <Lib.Interfaces.IAppConfiguration, Lib.Services.JsonFileConfiguration>() .AddSingleton <Lib.Interfaces.IInstanceService, Lib.Services.MastodonInstanceService>() .AddSingleton <Lib.Interfaces.IFeedService, Lib.Services.FeedService>() .AddSingleton <Lib.Interfaces.ICacheService, Lib.Services.SqliteCache.SqliteCacheService>() .AddSingleton <IConsole>(PhysicalConsole.Singleton) .AddLogging(log => { // Add console logger log.AddConsole(c => c.IncludeScopes = true); log.AddSerilog(); if (Program.Debug) { log.SetMinimumLevel(LogLevel.Debug); } }) .BuildServiceProvider(); var cfg = services.GetService <IAppConfiguration>(); // Initialize serilog logger Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(cfg.ConfigurationRoot) .Enrich.WithEnvironmentUserName() .Enrich.WithMachineName() .Enrich.FromLogContext() .CreateLogger(); // Create application for configuration var app = new CommandLineApplication <Program>(); // configure app app.Conventions .UseDefaultConventions() .UseConstructorInjection(services); // run and return var result = app.Execute(args); services.Dispose(); return(result); }