| File: Hosting\MauiApp.cs | Web Access |
| Project: src\src\Core\src\Core.csproj (Microsoft.Maui) |
using System; using System.Threading.Tasks; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; namespace Microsoft.Maui.Hosting { /// <summary> /// A .NET MAUI application with registered services and configuration data. /// </summary> public sealed class MauiApp : IDisposable, IAsyncDisposable { private readonly IServiceProvider _services; internal MauiApp(IServiceProvider services) { _services = services; } /// <summary> /// The application's configured services. /// </summary> public IServiceProvider Services => _services; /// <summary> /// The application's configured <see cref="IConfiguration"/>. /// </summary> public IConfiguration Configuration => _services.GetRequiredService<IConfiguration>(); /// <summary> /// Initializes a new instance of the <see cref="MauiAppBuilder"/> class with optional defaults. /// </summary> /// <param name="useDefaults">Whether to create the <see cref="MauiAppBuilder"/> with common defaults.</param> /// <returns>The <see cref="MauiAppBuilder"/>.</returns> public static MauiAppBuilder CreateBuilder(bool useDefaults = true) => new(useDefaults); /// <inheritdoc /> public void Dispose() { DisposeConfiguration(); (_services as IDisposable)?.Dispose(); } /// <inheritdoc /> public async ValueTask DisposeAsync() { DisposeConfiguration(); if (_services is IAsyncDisposable asyncDisposable) { // Fire and forget because this is called from a sync context await asyncDisposable.DisposeAsync(); } else { (_services as IDisposable)?.Dispose(); } } private void DisposeConfiguration() { // Explicitly dispose the Configuration, since it is added as a singleton object that the ServiceProvider // won't dispose. (Configuration as IDisposable)?.Dispose(); } } }