60 lines
2.9 KiB
C#
60 lines
2.9 KiB
C#
using System.ComponentModel.DataAnnotations;
|
|
using System.Text.Json;
|
|
using System.Text.Json.Serialization;
|
|
|
|
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, BinderAppSettingsSourceGenerationContext.Default.AppSettings);
|
|
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;
|
|
#pragma warning disable IL3050, IL2026
|
|
AppSettings? appSettings = configuration.Get<AppSettings>();
|
|
#pragma warning restore IL3050, IL2026
|
|
result = Get(appSettings);
|
|
return result;
|
|
}
|
|
|
|
}
|
|
|
|
[JsonSourceGenerationOptions(WriteIndented = true)]
|
|
[JsonSerializable(typeof(AppSettings))]
|
|
internal partial class BinderAppSettingsSourceGenerationContext : JsonSerializerContext
|
|
{
|
|
} |