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; namespace Hyperbar;
public class ConfigurationMonitor<TConfiguration> : IInitializer public class ConfigurationMonitor<TConfiguration>(IConfigurationSource<TConfiguration> source,
IConfigurationReader<TConfiguration> reader,
IMediator mediator) : IInitializer
where TConfiguration : where TConfiguration :
class, new() class, new()
{ {
private readonly FileSystemWatcher watcher; private FileSystemWatcher? watcher;
public ConfigurationMonitor(IConfigurationReader<TConfiguration> reader)
{
this.watcher = new FileSystemWatcher();
}
public Task InitializeAsync() public Task InitializeAsync()
{ {
void ChangedHandler(object sender, async void ChangedHandler(object sender,
FileSystemEventArgs args) 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; watcher.Changed += ChangedHandler;
return Task.CompletedTask; return Task.CompletedTask;
} }
@@ -48,7 +48,7 @@ public static class IServiceCollectionExtensions
return new ConfigurationSource<TConfiguration>(jsonFilePath, section); return new ConfigurationSource<TConfiguration>(jsonFilePath, section);
}); });
services.AddTransient<IConfigurationReader<TConfiguration>>(provider => services.AddSingleton<IConfigurationReader<TConfiguration>>(provider =>
{ {
JsonSerializerOptions? defaultSerializer = null; JsonSerializerOptions? defaultSerializer = null;
if (serializerDelegate is not null) if (serializerDelegate is not null)
@@ -61,7 +61,7 @@ public static class IServiceCollectionExtensions
defaultSerializer); defaultSerializer);
}); });
services.AddTransient<IConfigurationWriter<TConfiguration>>(provider => services.AddSingleton<IConfigurationWriter<TConfiguration>>(provider =>
{ {
JsonSerializerOptions? defaultSerializer = null; JsonSerializerOptions? defaultSerializer = null;
if (serializerDelegate is not null) if (serializerDelegate is not null)
@@ -74,6 +74,8 @@ public static class IServiceCollectionExtensions
defaultSerializer); defaultSerializer);
}); });
services.AddSingleton<IInitializer, ConfigurationMonitor<TConfiguration>>();
services.AddTransient(provider => new DefaultConfiguration<TConfiguration>(defaults)); services.AddTransient(provider => new DefaultConfiguration<TConfiguration>(defaults));
services.AddTransient<IInitializer, ConfigurationInitializer<TConfiguration>>(); services.AddTransient<IInitializer, ConfigurationInitializer<TConfiguration>>();
-4
View File
@@ -4,7 +4,3 @@ public interface IInitializer
{ {
Task InitializeAsync(); Task InitializeAsync();
} }
public interface IDataTemplateSelector
{
}