Dispose IServiceScope when window is destroyed to prevent memory leaks #30196
+100
−1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Note
Are you waiting for the changes in this PR to be merged?
It would be very helpful if you could test the resulting artifacts from this PR and let us know in a comment if this change resolves your issue. Thank you!
Description
This PR implements proper disposal of
IServiceScope
instances when windows are destroyed, addressing a memory leak where window-scoped services were never being disposed.Problem
Currently, .NET MAUI creates window-scoped service scopes in
MauiContextExtensions.MakeWindowScope()
but never disposes them when the associated window is closed or destroyed. This leads to memory leaks for services registered with scoped lifetime.The issue was marked with a TODO comment in the code:
Solution
SetWindowScope()
andDisposeWindowScope()
to track the window-scoped service scopeWindow.Destroying()
to dispose the scope before disconnecting the handlerTesting
Added comprehensive tests to verify:
All existing tests continue to pass (53 window-related tests ✅).
Example Usage
The fix is transparent to users - no code changes required. Services registered with scoped lifetime will now be properly disposed when windows are destroyed:
Fixes #8538.
💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.