Skip to content

Commit e8c4ef6

Browse files
committed
Add DisposableLoadableViewModelBase
1 parent 8621d60 commit e8c4ef6

1 file changed

Lines changed: 75 additions & 0 deletions

File tree

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
using System;
2+
using System.Reactive.Disposables;
3+
using JetBrains.Annotations;
4+
5+
namespace StabilityMatrix.Avalonia.ViewModels.Base;
6+
7+
public abstract class DisposableLoadableViewModelBase : LoadableViewModelBase, IDisposable
8+
{
9+
private readonly CompositeDisposable instanceDisposables = new();
10+
11+
/// <summary>
12+
/// Adds a disposable to be disposed when this view model is disposed.
13+
/// </summary>
14+
/// <param name="disposable">The disposable to add.</param>
15+
protected void AddDisposable([HandlesResourceDisposal] IDisposable disposable)
16+
{
17+
instanceDisposables.Add(disposable);
18+
}
19+
20+
/// <summary>
21+
/// Adds disposables to be disposed when this view model is disposed.
22+
/// </summary>
23+
/// <param name="disposables">The disposables to add.</param>
24+
protected void AddDisposable([HandlesResourceDisposal] params IDisposable[] disposables)
25+
{
26+
foreach (var disposable in disposables)
27+
{
28+
instanceDisposables.Add(disposable);
29+
}
30+
}
31+
32+
/// <summary>
33+
/// Adds a disposable to be disposed when this view model is disposed.
34+
/// </summary>
35+
/// <param name="disposable">The disposable to add.</param>
36+
/// <typeparam name="T">The type of the disposable.</typeparam>
37+
/// <returns>The disposable that was added.</returns>
38+
protected T AddDisposable<T>([HandlesResourceDisposal] T disposable)
39+
where T : IDisposable
40+
{
41+
instanceDisposables.Add(disposable);
42+
return disposable;
43+
}
44+
45+
/// <summary>
46+
/// Adds disposables to be disposed when this view model is disposed.
47+
/// </summary>
48+
/// <param name="disposables">The disposables to add.</param>
49+
/// <typeparam name="T">The type of the disposables.</typeparam>
50+
/// <returns>The disposables that were added.</returns>
51+
protected T[] AddDisposable<T>([HandlesResourceDisposal] params T[] disposables)
52+
where T : IDisposable
53+
{
54+
foreach (var disposable in disposables)
55+
{
56+
instanceDisposables.Add(disposable);
57+
}
58+
59+
return disposables;
60+
}
61+
62+
protected virtual void Dispose(bool disposing)
63+
{
64+
if (disposing)
65+
{
66+
instanceDisposables.Dispose();
67+
}
68+
}
69+
70+
public void Dispose()
71+
{
72+
Dispose(true);
73+
GC.SuppressFinalize(this);
74+
}
75+
}

0 commit comments

Comments
 (0)