1
0
mirror of https://github.com/chylex/TweetDuck.git synced 2025-06-07 20:34:08 +02:00
TweetDuck/lib/TweetLib.Core/App.cs

35 lines
1.3 KiB
C#

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.");
}
}
}
}