gpt4 book ai didi

wpf - Caliburn.Micro + Autofac 引导

转载 作者:行者123 更新时间:2023-12-04 16:04:01 27 4
gpt4 key购买 nike

我有一个 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 中通过在 App.xaml 中添加 bootstrap 类型作为资源来完成。 .见 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>

其次,由于您的 View 模型和 View 位于不同的程序集中,Caliburn.Micro 和 Autofac 都需要知道它们的位置(分别用于 View 位置和依赖项解析)。

您正在使用的 Autofac bootstrap 解决了来自 AssemblySource 的依赖关系。 Caliburn.Micro 用于查看位置的实例。因此,您只需要填充这个程序集源集合。您可以通过覆盖 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com