using System; using System.Collections.Generic; namespace TweetLib.Core.Features.Configuration{ public abstract class BaseConfig{ private readonly IConfigManager configManager; protected BaseConfig(IConfigManager configManager){ this.configManager = configManager; } // Management public void Save(){ configManager.GetInstanceInfo(this).Save(); } public void Reload(){ configManager.GetInstanceInfo(this).Reload(); } public void Reset(){ configManager.GetInstanceInfo(this).Reset(); } // Construction methods public T ConstructWithDefaults<T>() where T : BaseConfig{ return (T)ConstructWithDefaults(configManager); } protected abstract BaseConfig ConstructWithDefaults(IConfigManager configManager); // Utility methods protected void UpdatePropertyWithEvent<T>(ref T field, T value, EventHandler eventHandler){ if (!EqualityComparer<T>.Default.Equals(field, value)){ field = value; eventHandler?.Invoke(this, EventArgs.Empty); } } protected void UpdatePropertyWithRestartRequest<T>(ref T field, T value){ if (!EqualityComparer<T>.Default.Equals(field, value)){ field = value; configManager.TriggerProgramRestartRequested(); } } } }