dotnet/maui · critical · InvalidOperationException
Unable to find Application Services
Error message
Unable to find Application Services
What it means
MauiCompatInitializer.Initialize runs during MAUI's hosted-services init on Windows. It resolves IDispatcher from the DI container, falling back to IPlatformApplication.Current?.Services; if neither is available it throws InvalidOperationException('Unable to find Application Services'). This signals the DI container is missing core MAUI services.
Source
Thrown at src/Compatibility/Core/src/AppHostBuilderExtensions.cs:133
return builder;
}
static MauiAppBuilder AddMauiCompat(this MauiAppBuilder builder)
{
builder.Services.TryAddEnumerable(ServiceDescriptor.Transient<IMauiInitializeService, MauiCompatInitializer>());
return builder;
}
class MauiCompatInitializer : IMauiInitializeService
{
public void Initialize(IServiceProvider services)
{
#if WINDOWS
var dispatcher =
services.GetService<IDispatcher>() ??
IPlatformApplication.Current?.Services.GetRequiredService<IDispatcher>() ??
throw new InvalidOperationException("Unable to find Application Services");
dispatcher.DispatchIfRequired(() =>
{
var dictionaries = UI.Xaml.Application.Current?.Resources?.MergedDictionaries;
if (UI.Xaml.Application.Current?.Resources != null && dictionaries != null)
{
// Microsoft.Maui.Controls.Compatibility
UI.Xaml.Application.Current.Resources.AddLibraryResources("MicrosoftMauiControlsCompatibilityIncluded", "ms-appx:///Microsoft.Maui.Controls.Compatibility/Windows/Resources.xbf");
}
});
#endif
}
}
}
}
View on GitHub (pinned to f377ff1c5e)
Solutions
- Build the application through the standard MAUI host (CreateMauiApp/UseMauiApp) so IDispatcher and IPlatformApplication are registered.
- If using a custom ServiceProvider, register IDispatcher and set IPlatformApplication.Current appropriately.
- Ensure UseMauiCompatibility() is applied to the builder so initializers run in the right order.
Example fix
// before — custom host missing services var services = new ServiceCollection(); var sp = services.BuildServiceProvider(); new MauiCompatInitializer().Initialize(sp); // throws // after — use the MAUI host var app = MauiApp.CreateMauiApp().UseMauiApp<App>().UseMauiCompatibility();
Defensive patterns
Strategy: validation
Validate before calling
static IDispatcher ResolveDispatcher(IServiceProvider sp)
{
var d = sp.GetService<IDispatcher>()
?? IPlatformApplication.Current?.Services?.GetService<IDispatcher>();
if (d is null)
throw new InvalidOperationException("Build the app via MauiApp.CreateMauiApp().UseMauiApp<T>() so IDispatcher is registered.");
return d;
} Type guard
static bool HostProvidesDispatcher(IServiceProvider sp)
=> sp.GetService<IDispatcher>() is not null
|| IPlatformApplication.Current?.Services?.GetService<IDispatcher>() is not null; Prevention
- Always build through the MAUI host so IDispatcher and platform services register.
- For custom/test hosts, register IDispatcher and set IPlatformApplication.Current.
- Apply UseMauiCompatibility() to the builder.
When it happens
Trigger: IServiceProvider lacks IDispatcher AND IPlatformApplication.Current (or its Services) is null/unable to provide IDispatcher. Happens when the MAUI host was built without registering essential services or when the initializer runs in a context without the platform host.
Common situations: Calling compatibility APIs from a non-MAUI host (unit tests, a console host, design-time); a custom IServiceProvider not built via MauiApp/CreateMauiApp; DI registration order issue where MauiCompatInitializer runs before the dispatcher service is registered; partial setup where UseMauiApp<T>() was skipped.
Related errors
- Unable to find Application Services
- call Forms.Init() before this
- call GtkThemes.Init() before this
- Unable to find Visual Studio!
- ActivateApplication failed (HRESULT=0x{0:X8})
AI-assisted analysis of dotnet/maui@f377ff1c5e (2026-08-13).
Data as JSON: /api/errors/fc0d7e52484bfe6f.
Report an issue: GitHub.