El archivo App.xaml no se analiza si mi aplicación no establece un StartupUri?

Fondo: estoy creando una aplicación WPF usando MVVM, y usando un contenedor DI para construir mi ViewModels

Mi App.xaml se ve así:

<Application x:Class="WpfApp.App"
    ...xmlns etc...
    StartupUri="MainWindow.xaml">
    <Application.Resources>
        <app:ServiceLocator x:Key="serviceLocator" />
    </Application.Resources>
</Application>

MainWindow.xaml tiene este aspecto:

<Window x:Class="CompositeMefWpfApp.MainWindow"
    ...xmlns etc... >
    <Control.DataContext>
        <Binding Path="MainWindowViewModel" Source="{StaticResource serviceLocator}" />
    </Control.DataContext>

Ahora, todo esto funciona bien, pero elStartupUri está codificado en el XAML, que no quiero.
Siguiendo la guía de varias publicaciones y artículos de blog que encontré, eliminé laStartupUri e intenté crear elMainWindow enganchandoOnStartup en App.xaml.cs, así:

protected override void OnStartup( StartupEventArgs e )
{
    base.OnStartup(e);
    new MainWindow().Show();
}

El problema es que la aplicación se bloquea al intentar mostrar la ventana, con esta excepción:

No se puede encontrar el recurso llamado '{serviceLocator}'. Los nombres de los recursos distinguen entre mayúsculas y minúsculas. Error en el objeto 'System.Windows.Data.Binding' en el archivo de marcado 'WpfApp; componente / mainwindow.xaml' Línea 8 Posición 45.

Por lo que puedo decir, la<Application.Resources>a sección @ simplemente no se lee del archivo xaml. Puedo poner algo de código en OnStartup para agregar el recurso programáticamente de esta manera:

Resources.BeginInit();
Resources.Add("serviceLocator", new ServiceLocator());
Resources.EndInit();

Sin embargo, eso es un truco feo, y no me ayuda si quería poner algo más en el archivo app.xaml más adelante: -

¿Debería estar enganchando algún otro evento? ¿Hay alguna forma de evitar esto

Respuestas a la pregunta(4)

Su respuesta a la pregunta