Selector/Selector.CLI/Program.cs

71 lines
2.9 KiB
C#
Raw Normal View History

using System;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Configuration;
using NLog.Extensions.Logging;
namespace Selector.CLI
{
class Program
{
public static async Task Main(string[] args)
{
var host = CreateHostBuilder(args);
await host.RunConsoleAsync();
}
static IHostBuilder CreateHostBuilder(string[] args)
=> Host.CreateDefaultBuilder(args)
.ConfigureServices((context, services) => {
Console.WriteLine("~~~ Selector CLI ~~~");
Console.WriteLine("");
Console.WriteLine("Configuring...");
// CONFIG
2021-10-11 23:19:19 +01:00
services.Configure<RootOptions>(options => {
context.Configuration.GetSection(RootOptions.Key).Bind(options);
context.Configuration.GetSection($"{RootOptions.Key}:{WatcherOptions.Key}").Bind(options.WatcherOptions);
});
Console.WriteLine("Adding Services...");
// SERVICES
services.AddSingleton<IWatcherFactory, WatcherFactory>();
services.AddSingleton<IConsumerFactory, AudioFeatureInjectorFactory>();
services.AddSingleton<IWatcherCollectionFactory, WatcherCollectionFactory>();
// For generating spotify clients
2021-10-12 20:23:25 +01:00
services.AddSingleton<IRefreshTokenFactoryProvider, RefreshTokenFactoryProvider>();
2021-10-11 23:19:19 +01:00
switch(context.Configuration.GetValue<EqualityChecker>("selector:equality"))
{
case EqualityChecker.Uri:
Console.WriteLine("Using Uri Equality");
2021-10-11 23:19:19 +01:00
services.AddTransient<IEqual, UriEqual>();
break;
case EqualityChecker.String:
Console.WriteLine("Using String Equality");
2021-10-11 23:19:19 +01:00
services.AddTransient<IEqual, StringEqual>();
break;
}
// HOSTED SERVICES
if(context.Configuration
.GetSection($"{RootOptions.Key}:{WatcherOptions.Key}")
.Get<WatcherOptions>()
.Enabled)
{
Console.WriteLine("Adding Watcher Service");
services.AddHostedService<WatcherService>();
}
})
.ConfigureLogging((context, builder) => {
builder.ClearProviders();
builder.SetMinimumLevel(LogLevel.Trace);
builder.AddNLog(context.Configuration);
});
}
}