Reworked configuration monitoring
This commit is contained in:
@@ -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,7 +4,3 @@ public interface IInitializer
|
||||
{
|
||||
Task InitializeAsync();
|
||||
}
|
||||
|
||||
public interface IDataTemplateSelector
|
||||
{
|
||||
}
|
||||
Reference in New Issue
Block a user