Hermod
A cross-platform, modular and fully GDPR-compliant email archival solution!
Loading...
Searching...
No Matches
Hermod.Config.ConfigManager Class Reference

Provides an application-wide, thread safe way of getting and setting configurations relevant to the main portions of the application. More...

Inheritance diagram for Hermod.Config.ConfigManager:
Hermod.Config.IConfigLoaded Hermod.Config.IConfigChanged

Protected Member Functions

void OnConfigLoaded ()
 
void OnConfigChanged (string configName, object? prevValue, object? newValue, Type cfgType)
 
 ConfigManager ()
 

Properties

ILogger? AppLogger [get, set]
 Gets or sets the logger instance.
 
static ConfigManager Instance [get]
 Gets the application-wide instance of the ConfigManager.
 

Events

ConfigLoadedEventHandlerConfigLoaded
 
ConfigChangedEventHandlerConfigChanged
 
- Events inherited from Hermod.Config.IConfigLoaded
ConfigLoadedEventHandlerConfigLoaded
 
- Events inherited from Hermod.Config.IConfigChanged
ConfigChangedEventHandlerConfigChanged
 Handles situations where configurations are modified.
 

Private Member Functions

FileInfo GetDefaultConfigPath ()
 

Private Attributes

readonly object m_lock
 
volatile string m_lockedBy
 

Static Private Attributes

const string DefaultConfigFileName = ".hermod.json"
 
static ? FileInfo _defaultConfigPathCache = null
 
static ? ConfigManager _instance
 

Detailed Description

Provides an application-wide, thread safe way of getting and setting configurations relevant to the main portions of the application.

Thread-safety is guaranteed on a per-instance basis.

Getters and setters provided by this class support use of dot-notation for configurations.

Getting and setting values with and without dot-notation:

void GetConfigWithDotNotation() {
var cfg = ConfigManager.Instance.GetConfig<bool>("Object.Object.Object.Value");
}
void GetConfigWithoutDotNotation() {
var cfg = ConfigManager.Instance.GetConfig<bool>("Value");
}
void SetConfigWithDotNotation() {
ConfigManager.Instance.SetConfig<int>("Object.Object.Value", 123 ^ 456);
}
void SetConfigWithoutDotNotation() {
ConfigManager.Instance.SetConfig<object>("Value", new { ComplexType = new { WithMoreValues = true } });
}
Provides an application-wide, thread safe way of getting and setting configurations relevant to the m...
static ConfigManager Instance
Gets the application-wide instance of the ConfigManager.

Definition at line 45 of file ConfigManager.cs.

Constructor & Destructor Documentation

◆ ConfigManager()

Hermod.Config.ConfigManager.ConfigManager ( )
inlineprotected

Definition at line 99 of file ConfigManager.cs.

99 {
100 m_lock = new object();
101 m_lockedBy = string.Empty;
102 m_configDictionary = new JObject();
103 m_configFile = GetDefaultConfigPath();
104 m_defaultConfig = LoadDefaultConfig();
105 }
volatile string m_lockedBy

References Hermod.Config.ConfigManager.GetDefaultConfigPath(), Hermod.Config.ConfigManager.m_lock, and Hermod.Config.ConfigManager.m_lockedBy.

Member Function Documentation

◆ GetDefaultConfigPath()

FileInfo Hermod.Config.ConfigManager.GetDefaultConfigPath ( )
inlineprivate

Definition at line 75 of file ConfigManager.cs.

75 {
76 return
78 (
79 _defaultConfigPathCache = AppInfo.GetBaseHermodDirectory()
80 .GetSubFile(
81 AppInfo.HermodAppCfgDirName,
83 )
84 );
85 }
static ? FileInfo _defaultConfigPathCache
const string DefaultConfigFileName

References Hermod.Config.ConfigManager._defaultConfigPathCache, Hermod.Config.ConfigManager.DefaultConfigFileName, Hermod.Core.AppInfo.GetBaseHermodDirectory(), and Hermod.Core.AppInfo.HermodAppCfgDirName.

Referenced by Hermod.Config.ConfigManager.ConfigManager().

◆ OnConfigChanged()

void Hermod.Config.ConfigManager.OnConfigChanged ( string  configName,
object?  prevValue,
object?  newValue,
Type  cfgType 
)
inlineprotected

Definition at line 65 of file ConfigManager.cs.

65 {
66 ConfigChanged?.Invoke(this, new ConfigChangedEventArgs(configName, prevValue, newValue, cfgType));
67 }
ConfigChangedEventHandler? ConfigChanged

References Hermod.Config.ConfigManager.ConfigChanged.

◆ OnConfigLoaded()

void Hermod.Config.ConfigManager.OnConfigLoaded ( )
protected

Member Data Documentation

◆ _defaultConfigPathCache

? FileInfo Hermod.Config.ConfigManager._defaultConfigPathCache = null
staticprivate

Definition at line 73 of file ConfigManager.cs.

Referenced by Hermod.Config.ConfigManager.GetDefaultConfigPath().

◆ _instance

? ConfigManager Hermod.Config.ConfigManager._instance
staticprivate

Definition at line 89 of file ConfigManager.cs.

◆ DefaultConfigFileName

const string Hermod.Config.ConfigManager.DefaultConfigFileName = ".hermod.json"
staticprivate

Definition at line 71 of file ConfigManager.cs.

Referenced by Hermod.Config.ConfigManager.GetDefaultConfigPath().

◆ m_lock

readonly object Hermod.Config.ConfigManager.m_lock
private

Definition at line 47 of file ConfigManager.cs.

Referenced by Hermod.Config.ConfigManager.ConfigManager().

◆ m_lockedBy

volatile string Hermod.Config.ConfigManager.m_lockedBy
private

Definition at line 48 of file ConfigManager.cs.

Referenced by Hermod.Config.ConfigManager.ConfigManager().

Property Documentation

◆ AppLogger

ILogger? Hermod.Config.ConfigManager.AppLogger
getset

Gets or sets the logger instance.

The new ILogger instance.

Definition at line 54 of file ConfigManager.cs.

54{ get; set; }

◆ Instance

ConfigManager Hermod.Config.ConfigManager.Instance
staticget

Gets the application-wide instance of the ConfigManager.

Plugins will retrieve their own instance of this class.

Definition at line 97 of file ConfigManager.cs.

Event Documentation

◆ ConfigChanged

ConfigChangedEventHandler? Hermod.Config.ConfigManager.ConfigChanged

Definition at line 63 of file ConfigManager.cs.

Referenced by Hermod.Config.ConfigManager.OnConfigChanged().

◆ ConfigLoaded

ConfigLoadedEventHandler? Hermod.Config.ConfigManager.ConfigLoaded

Definition at line 57 of file ConfigManager.cs.


The documentation for this class was generated from the following file: