winlog/Models/Binder/AppSettings.cs

51 lines
2.6 KiB
C#

using System.ComponentModel.DataAnnotations;
using System.Text.Json;
namespace WinLog.Models.Binder;
public class AppSettings
{
#nullable disable
[Display(Name = "Date Format"), Required] public string DateFormat { get; set; }
[Display(Name = "Directory"), Required] public string Directory { get; set; }
[Display(Name = "Log Filter"), Required] public string LogFilter { get; set; }
[Display(Name = "Message Filter"), Required] public string[] MessageFilters { get; set; }
[Display(Name = "Monitor Application Resource"), Required] public string MonitorApplicationResource { get; set; }
[Display(Name = "Monitor Application Site"), Required] public string MonitorApplicationSite { get; set; }
[Display(Name = "Milliseconds Delay"), Required] public int? MillisecondsDelay { get; set; }
[Display(Name = "Rolling Minutes"), Required] public int? RollingMinutes { get; set; }
#nullable restore
public override string ToString()
{
string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true });
return result;
}
private static Models.AppSettings Get(AppSettings appSettings)
{
Models.AppSettings result;
if (appSettings.DateFormat is null) throw new NullReferenceException(nameof(DateFormat));
if (appSettings.Directory is null) throw new NullReferenceException(nameof(Directory));
if (appSettings.LogFilter is null) throw new NullReferenceException(nameof(LogFilter));
if (appSettings.MessageFilters is null) throw new NullReferenceException(nameof(MessageFilters));
if (appSettings.MillisecondsDelay is null) throw new NullReferenceException(nameof(MillisecondsDelay));
if (appSettings.MonitorApplicationResource is null) throw new NullReferenceException(nameof(MonitorApplicationResource));
if (appSettings.MonitorApplicationSite is null) throw new NullReferenceException(nameof(MonitorApplicationSite));
if (appSettings.RollingMinutes is null) throw new NullReferenceException(nameof(RollingMinutes));
result = new(appSettings.DateFormat, appSettings.Directory, appSettings.LogFilter, appSettings.MessageFilters, appSettings.MonitorApplicationResource, appSettings.MonitorApplicationSite, appSettings.MillisecondsDelay.Value, appSettings.RollingMinutes.Value);
return result;
}
public static Models.AppSettings Get(IConfiguration configuration)
{
Models.AppSettings result;
AppSettings appSettings = configuration.Get<AppSettings>();
result = Get(appSettings);
return result;
}
}