using System; using System.Diagnostics.CodeAnalysis; using TweetLib.Core.Application; namespace TweetLib.Core { public sealed class App { #pragma warning disable CS8618 // Non-nullable field is uninitialized. Consider declaring as nullable. public static IAppErrorHandler ErrorHandler { get; private set; } public static IAppSystemHandler SystemHandler { get; private set; } public static IAppResourceHandler ResourceHandler { get; private set; } #pragma warning restore CS8618 // Non-nullable field is uninitialized. Consider declaring as nullable. // Builder [SuppressMessage("ReSharper", "MemberHidesStaticFromOuterClass")] public sealed class Builder { public IAppErrorHandler? ErrorHandler { get; set; } public IAppSystemHandler? SystemHandler { get; set; } public IAppResourceHandler? ResourceHandler { get; set; } // Validation internal void Initialize() { App.ErrorHandler = Validate(ErrorHandler, nameof(ErrorHandler)); App.SystemHandler = Validate(SystemHandler, nameof(SystemHandler)); App.ResourceHandler = Validate(ResourceHandler, nameof(ResourceHandler)); } private T Validate<T>(T? obj, string name) where T : class { return obj ?? throw new InvalidOperationException("Missing property " + name + " on the provided App."); } } } }