Finalize DI: drop transitional VM ctor; harden disposal

Remove the transitional MainWindowViewModel(AppSettings, IStartupTracer) constructor and the _ownsServices flag now that every caller resolves the view model from the container; the container owns and disposes the hardware monitor (driver unload), so the view model no longer disposes it. Make HardwareMonitorService.Dispose idempotent with a _disposed guard, and run provider disposal in a finally block in MainWindow_Closed so the ring0 driver is always unloaded on real exit even if an earlier teardown step throws.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
2026-06-02 15:25:39 -05:00
co-authored by Copilot
parent dcb6a5b803
commit 5aa7c30a6a
3 changed files with 22 additions and 39 deletions
@@ -28,6 +28,7 @@ public sealed class HardwareMonitorService : IHardwareMonitorService
private readonly UpdateVisitor _updateVisitor = new();
private readonly TreeRebuildCoalescer _treeRebuildCoalescer;
private bool _isOpen;
private bool _disposed;
public HardwareMonitorService(AppSettings settings)
{
@@ -199,6 +200,11 @@ public sealed class HardwareMonitorService : IHardwareMonitorService
public void Dispose()
{
if (_disposed)
return;
_disposed = true;
// Clear before closing so any tree-rebuild task still pending its delay bails instead of rebuilding from a
// half-closed Computer.
_isOpen = false;