我有一个 Caliburn.Micro 项目,我正在尝试从它的 SimpleContainer
移植到 Autofac 。
我正在使用 this code ,这是 this guide 中代码的更新版本。
使用 SimpleContainer
我只是做了(在 bootstrap 内)
protected override void OnStartup(object sender, System.Windows.StartupEventArgs e)
{
this.DisplayRootViewFor<IScreen>(); // where ShellViewModel : Screen
}
现在这不再起作用了,那么我应该怎么做才能将 Autofac 与 Caliburn.Micro 集成?
最佳答案
您的解决方案有一些问题。
首先,没有什么会调用您的 AppBootstrapper
。这通常在 Caliburn.Micro 中通过将 bootstrap 类型添加为 App.xaml
中的资源来完成。有关 WPF 的说明,请参阅 here。
即你的 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>
其次,由于您的 View 模型和 View 位于不同的程序集中,Caliburn.Micro 和 Autofac 都需要知道它们的位置(分别用于 View 位置和依赖项解析)。
您正在使用的 Autofac bootstrap 从 Caliburn.Micro 用于查看位置的
AssemblySource
实例解析依赖项。因此,您只需要填充这个程序集源集合。您可以通过覆盖 SelectAssemblies
中的 AppBootstrapper
来做到这一点:protected override IEnumerable<Assembly> SelectAssemblies()
{
return new[]
{
GetType().Assembly,
typeof(ShellViewModel).Assembly,
typeof(ShellView).Assembly
};
}
关于wpf - Caliburn.Micro + Autofac 引导,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20056673/