private void BuildLogger(BillReminderServiceSettings settings) { Log.Logger = new LoggerConfiguration() .WriteTo.Console() .SetMinimumLevel(settings.MinimumLogLevel) .CreateLogger(); }
private ICredentialsByHost GetEmailCredentials(BillReminderServiceSettings settings) { CredentialCache cache = new CredentialCache(); cache.Add("", 587, "Basic", new NetworkCredential()); return(cache); }
private IServiceProvider ConfigureServices(BillReminderServiceSettings settings) { var serviceCollection = new ServiceCollection(); BuildLogger(settings); serviceCollection.AddSingleton <IBillParser, BillJsonParser>(); serviceCollection.AddSingleton <IBillDueCalculator, BillDueCalculator>(); serviceCollection.AddSingleton <ICredentialsByHost>(s => GetEmailCredentials(settings)); serviceCollection.AddSingleton <IEnumerable <INotifier> >(s => GetNotifiers(s, settings)); serviceCollection.AddSingleton <IBillDueService, BillDueService>(); return(serviceCollection.BuildServiceProvider()); }
static void Main(string[] args) { Program app = new Program(); BillReminderServiceSettings settings = null; string json; try { settings = app.BuildConfiguration(args); } catch (Exception ex) { Console.WriteLine(ex.Message); return; } IServiceProvider serviceProvider = app.ConfigureServices(settings); try { try { json = app.GetBillData(settings.DataFilePath); } catch (FileNotFoundException ex) { Log.Error(string.Format("Could not find data file. Looking for \"{0}\".", settings.DataFilePath)); throw ex; } serviceProvider.GetService <IBillDueService>().ProcessBills(json).GetAwaiter().GetResult(); } catch (Exception ex) { Log.Debug(ex, ex.Message); return; } finally { Log.CloseAndFlush(); } }
private IEnumerable <INotifier> GetNotifiers(IServiceProvider serviceProvider, BillReminderServiceSettings settings) { var notifiers = new List <INotifier>(); if (settings.NotificationSinks.Contains("console")) { notifiers.Add(new ConsoleNotifier()); } if (settings.NotificationSinks.Contains("email")) { notifiers.Add(new EmailNotifier(settings.emailNotificationSettings)); } return(notifiers); }