O arquivo App.xaml não será analisado se meu aplicativo não definir um StartupUri?

Background: estou criando um aplicativo WPF usando MVVM e usando um contêiner de DI para criar meus ViewModels

My App.xaml aparece assim:

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

MainWindow.xaml aparece assim:

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

Agora, tudo isso funciona bem, mas oStartupUri é codificado no XAML, o que eu não quer
Seguindo as orientações de vários posts e artigos que encontrei, removi oStartupUri e tentou criar oMainWindow enganchandoOnStartup em App.xaml.cs, assim:

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

O problema é que o aplicativo trava ao tentar mostrar a janela, com esta exceção:

Não é possível encontrar o recurso chamado '{serviceLocator}'. Os nomes de recursos diferenciam maiúsculas de minúsculas. Erro no objeto 'System.Windows.Data.Binding' no arquivo de marcação 'WpfApp; component / mainwindow.xaml' Linha 8 Posição 45.

Tanto quanto eu posso dizer, o<Application.Resources> seção @ simplesmente não está sendo lida no arquivo xaml. Eu posso colocar algum código no OnStartup para adicionar o recurso programaticamente assim:

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

No entanto, esse é um truque feio e não ajuda em nada se eu quiser colocar outra coisa no arquivo app.xaml mais tarde: -

Devo estar conectando algum outro evento? Existe uma maneira de contornar isso?

questionAnswers(4)

yourAnswerToTheQuestion