diff --git a/Hyperbar/Configuration/ConfigurationMonitor.cs b/Hyperbar/Configuration/ConfigurationMonitor.cs index 2e77dff..95fa667 100644 --- a/Hyperbar/Configuration/ConfigurationMonitor.cs +++ b/Hyperbar/Configuration/ConfigurationMonitor.cs @@ -1,24 +1,33 @@ namespace Hyperbar; -public class ConfigurationMonitor : IInitializer +public class ConfigurationMonitor(IConfigurationSource source, + IConfigurationReader reader, + IMediator mediator) : IInitializer where TConfiguration : class, new() { - private readonly FileSystemWatcher watcher; - - public ConfigurationMonitor(IConfigurationReader 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(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; } diff --git a/Hyperbar/Extensions/IServiceCollectionExtensions.cs b/Hyperbar/Extensions/IServiceCollectionExtensions.cs index 7e320fd..653f4d3 100644 --- a/Hyperbar/Extensions/IServiceCollectionExtensions.cs +++ b/Hyperbar/Extensions/IServiceCollectionExtensions.cs @@ -48,7 +48,7 @@ public static class IServiceCollectionExtensions return new ConfigurationSource(jsonFilePath, section); }); - services.AddTransient>(provider => + services.AddSingleton>(provider => { JsonSerializerOptions? defaultSerializer = null; if (serializerDelegate is not null) @@ -61,7 +61,7 @@ public static class IServiceCollectionExtensions defaultSerializer); }); - services.AddTransient>(provider => + services.AddSingleton>(provider => { JsonSerializerOptions? defaultSerializer = null; if (serializerDelegate is not null) @@ -74,6 +74,8 @@ public static class IServiceCollectionExtensions defaultSerializer); }); + services.AddSingleton>(); + services.AddTransient(provider => new DefaultConfiguration(defaults)); services.AddTransient>(); diff --git a/Hyperbar/Lifecycles/IInitializer.cs b/Hyperbar/Lifecycles/IInitializer.cs index f1d9320..a12d1ea 100644 --- a/Hyperbar/Lifecycles/IInitializer.cs +++ b/Hyperbar/Lifecycles/IInitializer.cs @@ -3,8 +3,4 @@ public interface IInitializer { Task InitializeAsync(); -} - -public interface IDataTemplateSelector -{ } \ No newline at end of file