using System.Collections.Generic; namespace Engine.Core.Config; public interface IConfiguration { static IConfiguration System { get; set; } = new SystemConfiguration(); static IConfiguration Shared { get; set; } = new BasicConfiguration(); Event OnAdded { get; } Event OnSet { get; } Event OnRemoved { get; } IReadOnlyDictionary Values { get; } bool Has(string key); object? Get(string key); T? Get(string key, T? defaultValue = default); void Set(string key, T value); void Remove(string key); readonly record struct ConfigUpdateArguments(string Key); }