using System; 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 IAppLockHandler LockHandler { 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 public sealed class Builder{ public IAppErrorHandler? ErrorHandler { get; set; } public IAppLockHandler? LockHandler { get; set; } public IAppSystemHandler? SystemHandler { get; set; } public IAppResourceHandler? ResourceHandler { get; set; } // Validation internal void Initialize(){ App.ErrorHandler = Validate(ErrorHandler, nameof(ErrorHandler))!; App.LockHandler = Validate(LockHandler, nameof(LockHandler))!; App.SystemHandler = Validate(SystemHandler, nameof(SystemHandler))!; App.ResourceHandler = Validate(ResourceHandler, nameof(ResourceHandler))!; } private T Validate<T>(T obj, string name){ if (obj == null){ throw new InvalidOperationException("Missing property " + name + " on the provided App."); } return obj; } } } }