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?