Host registration
MVVMExpress uses Microsoft.Extensions.DependencyInjection only. There is no DryIoc, Unity, or Grace package. Shared libraries and tests call AddMvvmExpress. A Avalonia app calls UseAvaloniaMvvmExpress, which registers Core services, replaces IMainThread with AvaloniaDispatcherMainThread, maps IWindowContext to AvaloniaWindowContext, marshals command/property notifications, and auto-attaches Loaded / Unloaded lifecycle.
builder.Services.UseAvaloniaMvvmExpress(o => o
.UseFrameNavigation((nav, _) => nav
.Map<LoginViewModel, LoginPage>("login")
.Map<HomeViewModel, HomePage>("home"))
.UseDialogs()
.UseAuth<LoginViewModel>());
// net10.0 tests / shared ViewModel projects
services.AddMvvmExpress();
services.AddAuth<LoginViewModel>();UseFrameNavigation is the login → replace-root → push host. There is no UseShell. UseDialogs lives in the Dialogs package. AddModule<T>() registers a feature assembly. MvvmExpressOptions also has CancelOperationsOnDisappear, EnableDiagnostics, MarshalNotifications (default true), AutoAttachLifecycle, ConfirmDirtyNavigation, and ForwardNavigationFailures.
What AddMvvmExpress registers
| Abstraction | Default | Typical app replacement |
|---|---|---|
| IMessageHub | MessageHub | Keep |
| IBusyGate | BusyGate | Keep |
| IErrorSink | NullErrorSink | App logger sink |
| ICache / ICachedFetcher | MemoryCache / CachedFetcher | App HTTP cache |
| IConnectivityProbe | InMemoryConnectivityProbe | App probe |
| IOperationExecutor | OperationExecutor | Keep |
| IViewModelScopeFactory | ServiceViewModelScopeFactory | Keep |
| IFeatureSwitch | MemoryFeatureSwitch | App flags |
| IStateStore | MemoryStateStore | App persist store |
| IWindowContext | WindowContext.Default | AvaloniaWindowContext.Current / For(Window) |
| IWindowNavigatorRegistry | WindowNavigatorRegistry | Keep; register per window |
| INavigator / IPageNavigator | InMemoryNavigator | UseFrameNavigation() |
| IMainThread | ImmediateMainThread | AvaloniaDispatcherMainThread (host) |
| IDialogs / INotifier | NullDialogs | UseDialogs() → AvaloniaDialogs / AvaloniaNotifier |
| IAuthState | not registered | UseAuth + app IAuthState |
Feature modules
IModule / AddModule<T>() is a thin composition boundary. A feature assembly registers its own routes, ViewModels, and services. It is not a Prism region catalog.
public sealed class CatalogModule : IModule
{
public void Configure(IServiceCollection services)
{
services.AddSingleton<ICatalog, Catalog>();
}
}
builder.Services.AddModule<CatalogModule>();