-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Description
Hi,
What do you think about to load the configuration from a file. The best part is that we can watch the file´s changes at runtime and reload the configuration like nJupiter.Configuration (deprecated project). With that, you don´t need to restart the application if any configuration changed or a new configuration was added.
I am thinking in somthing like this:
`public abstract class CfgNode {
...
private string CfgFilePath;
private FileSystemWatcher CfgFileWatcher;
private readonly object _cfgFileLocker = new object();
...
public void LoadFromFile(string cfgFilePath)
{
if (!File.Exists(cfgFilePath)) throw new ArgumentException($"{nameof(cfgFilePath)} not exists.", nameof(cfgFilePath));
var configurationsFilePathInfo = new FileInfo(cfgFilePath);
CfgFileWatcher = new FileSystemWatcher
{
Path = configurationsFilePathInfo.DirectoryName,
Filter = configurationsFilePathInfo.Name,
NotifyFilter = NotifyFilters.LastWrite
};
CfgFileWatcher.Changed += OnCfgFileChanged;
CfgFileWatcher.EnableRaisingEvents = true;
CfgFilePath = cfgFilePath;
var cfg = File.ReadAllText(CfgFilePath);
Load(cfg);
}
private void OnCfgFileChanged(object source, FileSystemEventArgs e)
{
try
{
lock (_cfgFileLocker)
{
CfgFileWatcher.EnableRaisingEvents = false;
var cfg = File.ReadAllText(CfgFilePath);
Load(cfg);
}
}
finally
{
CfgFileWatcher.EnableRaisingEvents = true;
}
}
...
}`
We will need System.IO.
Regards,
Darian
Metadata
Metadata
Assignees
Labels
No labels