コード例 #1
0
 private void BuildLogger(BillReminderServiceSettings settings)
 {
     Log.Logger = new LoggerConfiguration()
                  .WriteTo.Console()
                  .SetMinimumLevel(settings.MinimumLogLevel)
                  .CreateLogger();
 }
コード例 #2
0
        private ICredentialsByHost GetEmailCredentials(BillReminderServiceSettings settings)
        {
            CredentialCache cache = new CredentialCache();

            cache.Add("", 587, "Basic", new NetworkCredential());

            return(cache);
        }
コード例 #3
0
        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());
        }
コード例 #4
0
        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();
            }
        }
コード例 #5
0
        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);
        }