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