Reworked configuration monitoring

This commit is contained in:
TheXamlGuy
2024-01-09 23:07:07 +00:00
parent a17dca0f2f
commit 197454ba1e
3 changed files with 22 additions and 15 deletions
+18 -9
View File
@@ -1,24 +1,33 @@
namespace Hyperbar;
public class ConfigurationMonitor<TConfiguration> : IInitializer
public class ConfigurationMonitor<TConfiguration>(IConfigurationSource<TConfiguration> source,
IConfigurationReader<TConfiguration> reader,
IMediator mediator) : IInitializer
where TConfiguration :
class, new()
{
private readonly FileSystemWatcher watcher;
public ConfigurationMonitor(IConfigurationReader<TConfiguration> reader)
{
this.watcher = new FileSystemWatcher();
}
private FileSystemWatcher? watcher;
public Task InitializeAsync()
{
void ChangedHandler(object sender,
async void ChangedHandler(object sender,
FileSystemEventArgs args)
{
if (reader.Read() is { } configuration)
{
await mediator.PublishAsync(new ConfigurationChanged<TConfiguration>(configuration));
}
}
string fileName = Path.GetFileName(source.Path);
watcher = new FileSystemWatcher
{
NotifyFilter = NotifyFilters.LastWrite,
Path = source.Path.Replace(fileName, ""),
Filter = fileName,
EnableRaisingEvents = true
};
watcher.Changed += ChangedHandler;
return Task.CompletedTask;
}
@@ -48,7 +48,7 @@ public static class IServiceCollectionExtensions
return new ConfigurationSource<TConfiguration>(jsonFilePath, section);
});
services.AddTransient<IConfigurationReader<TConfiguration>>(provider =>
services.AddSingleton<IConfigurationReader<TConfiguration>>(provider =>
{
JsonSerializerOptions? defaultSerializer = null;
if (serializerDelegate is not null)
@@ -61,7 +61,7 @@ public static class IServiceCollectionExtensions
defaultSerializer);
});
services.AddTransient<IConfigurationWriter<TConfiguration>>(provider =>
services.AddSingleton<IConfigurationWriter<TConfiguration>>(provider =>
{
JsonSerializerOptions? defaultSerializer = null;
if (serializerDelegate is not null)
@@ -74,6 +74,8 @@ public static class IServiceCollectionExtensions
defaultSerializer);
});
services.AddSingleton<IInitializer, ConfigurationMonitor<TConfiguration>>();
services.AddTransient(provider => new DefaultConfiguration<TConfiguration>(defaults));
services.AddTransient<IInitializer, ConfigurationInitializer<TConfiguration>>();
-4
View File
@@ -3,8 +3,4 @@
public interface IInitializer
{
Task InitializeAsync();
}
public interface IDataTemplateSelector
{
}