using CommunityToolkit.Mvvm.Messaging; namespace Toolkit.Foundation; public partial class ObservableConfiguration(IServiceProvider provider, IServiceFactory factory, IMessenger messenger, IDisposer disposer, TConfiguration configuration, IWritableConfiguration writer, Func read, Action write) : Observable(provider, factory, messenger, disposer), IHandler> where TConfiguration : class { public void Handle(ChangedEventArgs args) { if (args.Sender is TConfiguration configuration) { Value = read(configuration); } } protected override void Activated() => Value = read(configuration); protected override void Changed(TValue? value) { if (IsActive) { writer.Write(args => write(value, args)); } } }