This commit is contained in:
TheXamlGuy
2024-05-18 20:40:12 +01:00
parent 85a14a8259
commit 1b60711ec4
9 changed files with 84 additions and 76 deletions
+110
View File
@@ -0,0 +1,110 @@
using CommunityToolkit.Mvvm.ComponentModel;
namespace Toolkit.Foundation;
public partial class Observable :
ObservableObject,
IObservableViewModel,
IInitializer,
IActivated,
IDeactivating,
IDeactivated,
IDeactivatable,
IDisposable,
IServiceProviderRequired,
IServiceFactoryRequired,
IMediatorRequired,
IPublisherRequired,
IDisposerRequired
{
[ObservableProperty]
private bool isInitialized;
public Observable(IServiceProvider provider,
IServiceFactory factory,
IMediator mediator,
IPublisher publisher,
ISubscription subscriber,
IDisposer disposer)
{
Provider = provider;
Factory = factory;
Mediator = mediator;
Publisher = publisher;
Disposer = disposer;
subscriber.Add(this);
}
public event EventHandler? DeactivateHandler;
public IDisposer Disposer { get; }
public IServiceFactory Factory { get; }
public IMediator Mediator { get; }
public IServiceProvider Provider { get; }
public IPublisher Publisher { get; }
public virtual Task OnActivated() =>
Task.CompletedTask;
public Task Deactivate()
{
DeactivateHandler?.Invoke(this, new EventArgs());
return Task.CompletedTask;
}
public virtual Task OnDeactivated() =>
Task.CompletedTask;
public virtual Task OnDeactivating() =>
Task.CompletedTask;
public void Dispose()
{
GC.SuppressFinalize(this);
Disposer.Dispose(this);
}
public Task Initialize()
{
if (IsInitialized)
{
return Task.CompletedTask;
}
IsInitialized = true;
return Task.CompletedTask;
}
}
public partial class Observable<TValue>(IServiceProvider provider,
IServiceFactory factory,
IMediator mediator,
IPublisher publisher,
ISubscription subscriber,
IDisposer disposer) : Observable(provider, factory, mediator, publisher, subscriber, disposer)
where TValue : notnull
{
[ObservableProperty]
private TValue? value;
}
public partial class Observable<TKey, TValue>(IServiceProvider provider,
IServiceFactory factory,
IMediator mediator,
IPublisher publisher,
ISubscription subscriber,
IDisposer disposer,
TValue? value = null) : Observable(provider, factory, mediator, publisher, subscriber, disposer)
where TValue : class
{
[ObservableProperty]
private TKey? key;
[ObservableProperty]
private TValue? value = value;
}