В вашем решении есть несколько недостатков.
Во-первых, ничто не вызывает ваш AppBootstrapper
. Обычно это делается в Caliburn.Micro путем добавления вашего типа загрузочного файла в качестве ресурса в App.xaml
. См. here для получения инструкций по WPF.
т.е. ваш App.xaml
должен выглядеть следующим образом:
<Application x:Class="AutofacTests.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:AutofacTests">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary>
<local:AppBootstrapper x:Key="bootstrapper" />
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
Во-вторых, как ваши просматривать модели и представления находятся в разных сборках, как нужно будет Caliburn.Micro и Autofac знать, где они расположены (для просмотра местоположения и соответственно разрешение зависимостей).
Загрузочный автозагрузчик Autofac использует разрешения разрешений от экземпляра AssemblySource
, который Caliburn.Micro использует для просмотра местоположения. Поэтому вам просто нужно заполнить эту сборку сборок. Вы можете сделать это overridding SelectAssemblies
в вашем AppBootstrapper
:
protected override IEnumerable<Assembly> SelectAssemblies()
{
return new[]
{
GetType().Assembly,
typeof(ShellViewModel).Assembly,
typeof(ShellView).Assembly
};
}
Что происходит, вы получаете исключение или что? Пожалуйста, предоставьте более подробную информацию. Спасибо. –
Ничего. И странная вещь, которую я заметил, это то, что она даже не запускает метод OnStartup. Теоретически DisplayRootViewFor <> должен вызывать WindowManager.ShowDialog для ShellView с ShellViewModel, но ничего не отображается. – Sergio
Используете ли вы Bootstrapper из указанной вами ссылки без изменений? –