namespace Toolkit.Foundation; public partial class ConfigurationValueViewModel(IServiceProvider provider, IServiceFactory factory, IMediator mediator, IPublisher publisher, ISubscriber subscriber, IDisposer disposer, TConfiguration configuration, IWritableConfiguration writer, Func read, Action write) : Observable(provider, factory, mediator, publisher, subscriber, disposer), INotificationHandler> where TConfiguration : class { public async Task Handle(ChangedEventArgs args) { if (args.Sender is TConfiguration configuration) { await Task.Run(() => Value = read(configuration)); } } public override async Task OnActivated() { 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 partial class ConfigurationValueViewModel : ObservableCollection, INotificationHandler> where TConfiguration : class where TItem : notnull, IDisposable { private readonly TConfiguration configuration; private readonly Func read; private readonly Action write; private readonly IWritableConfiguration writer; public ConfigurationValueViewModel(IServiceProvider provider, IServiceFactory factory, IMediator mediator, IPublisher publisher, ISubscriber subscriber, IDisposer disposer, TConfiguration configuration, IWritableConfiguration writer, Func read, Action write, TValue? value = default) : base(provider, factory, mediator, publisher, subscriber, disposer, value) { this.configuration = configuration; this.writer = writer; this.read = read; this.write = write; Value = value; } public ConfigurationValueViewModel(IServiceProvider provider, IServiceFactory factory, IMediator mediator, IPublisher publisher, ISubscriber subscriber, IDisposer disposer, IEnumerable items, TConfiguration configuration, IWritableConfiguration writer, Func read, Action write, TValue? value = default) : base(provider, factory, mediator, publisher, subscriber, disposer, items, value) { this.configuration = configuration; this.writer = writer; this.read = read; this.write = write; Value = value; } public async Task Handle(ChangedEventArgs args) { if (args.Sender is TConfiguration configuration) { await Task.Run(() => Value = read(configuration)); } } public override async Task OnActivated() { 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); } }