Add Config locking and caching

This commit is contained in:
TheXamlGuy
2024-10-03 22:39:56 +01:00
parent 8136739372
commit 0c091b3a27
8 changed files with 235 additions and 141 deletions
@@ -15,22 +15,29 @@ public partial class ConfigurationValueViewModel<TConfiguration, TValue>(IServic
INotificationHandler<ChangedEventArgs<TConfiguration>>
where TConfiguration : class
{
public Task Handle(ChangedEventArgs<TConfiguration> args)
public async Task Handle(ChangedEventArgs<TConfiguration> args)
{
throw new NotImplementedException();
if (args.Sender is TConfiguration configuration)
{
// await Task.Run(() => Value = read(configuration));
}
}
protected override void OnChanged(TValue? value)
public override async Task OnActivated()
{
writer.Write(args => write(value, args));
await Task.Run(() => Value = read(configuration));
await base.OnActivated();
}
protected override async void OnChanged(TValue? value)
{
if (IsActivated)
{
await Task.Run(() => writer.Write(args => write(value, args)));
}
base.OnChanged(value);
}
public override Task OnActivated()
{
Value = read(configuration);
return base.OnActivated();
}
}
public partial class ConfigurationValueViewModel<TConfiguration, TValue, TItem> :
@@ -41,10 +48,9 @@ public partial class ConfigurationValueViewModel<TConfiguration, TValue, TItem>
IDisposable
{
private readonly TConfiguration configuration;
private readonly IWritableConfiguration<TConfiguration> writer;
private readonly Func<TConfiguration, TValue?> read;
private readonly Action<TValue?, TConfiguration> write;
private readonly IWritableConfiguration<TConfiguration> writer;
public ConfigurationValueViewModel(IServiceProvider provider,
IServiceFactory factory,
IMediator mediator,
@@ -86,20 +92,27 @@ public partial class ConfigurationValueViewModel<TConfiguration, TValue, TItem>
Value = value;
}
public Task Handle(ChangedEventArgs<TConfiguration> args)
public async Task Handle(ChangedEventArgs<TConfiguration> args)
{
throw new NotImplementedException();
if (args.Sender is TConfiguration configuration)
{
// await Task.Run(() => Value = read(configuration));
}
}
protected override void OnChanged(TValue? value)
public override async Task OnActivated()
{
writer.Write(args => write(value, args));
await Task.Run(() => Value = read(configuration));
await base.OnActivated();
}
protected override async void OnChanged(TValue? value)
{
if (IsActivated)
{
await Task.Run(() => writer.Write(args => write(value, args)));
}
base.OnChanged(value);
}
public override Task OnActivated()
{
Value = read(configuration);
return base.OnActivated();
}
}