gpt4 book ai didi

c# - 使用 caliburn micro 和 autofac 填充初始 View 模型数据

转载 作者:行者123 更新时间:2023-12-03 10:48:45 24 4
gpt4 key购买 nike

我正在同时学习 Caliburn.Micro 和 Autofac。我正在编写一个简单的应用程序,这样我就可以自学如何正确使用这两种技术。

每次我认为自己到了某个地方时,我总是对如何为我的 Root View 模型初始化数据感到困惑。此 View 模型需要注入(inject)一个“类别” View 模型列表。这个“类别” View 模型列表将在应用程序初始化期间加载。

那么,如何使用 autofac 注册我的根“Navigator” View 模型并通知 autofac 在创建新实例时 View 模型需要注入(inject)数据?

如果没有 caliburn 和 autofac,我只需创建自己的启动方法,加载我的数据,然后将其注入(inject)到我的 View 模型中。使用 caliburn,我试图覆盖 Bootstrap 中的配置方法,因为这是我应该使用 ioc 容器注册我的类的地方。

我的 Root View 模型:

public class NavigatorViewModel : Conductor<IScreen>.Collection.OneActive
{
public NavigatorViewModel(IEnumerable<CategoryViewModel> categories)
{
AddCategories(categories);
}

public void AddCategories(IEnumerable<CategoryViewModel> categories)
{
foreach (var category in categories)
{
if (Items.Contains(category))
continue;
Items.Add(category);
}
SetActiveItem();
}

private void SetActiveItem()
{
if (Items.Count < 1)
return;
ActiveItem = Items[0];
}
}

这是我使用 Autofac 注册 viewModel 的方式:
protected override void Configure()
{
var builder = new ContainerBuilder();

builder.RegisterType<CategoryViewModel>().AsSelf();
builder.RegisterType<NavigatorViewModel>().AsSelf();
...
container = builder.Build();
}

在注册我的 NavigatorViewModel 时,我如何告诉 autofac 它也需要注入(inject) CategoryViewModel 列表?

我猜我会在 caliburn Bootstrap 中加载我的数据,但我现在不确定如何将它全部连接起来。

最佳答案

这看起来像是一个关于 AutoFac 而不是 MVVM 或 Caliburn.Micro 的问题,无论如何,据我所知 AutoFac 自动支持序列自动连线(IEnumberable),因此当它尝试解析您的 Navigator 时,它应该自行填充列表,但如果您需要为数据加载提供自定义工作,您可以这样做:

builder.RegisterType<NavigatorViewModel>()
.AsSelf()
.WithParameter(
(p, c) => true,
(p, c) => new[]
{
// Load your CategoryViewModels here or any other data that you would like
});

您可以查看 AutoFac documentationWithParameter方法。

关于c# - 使用 caliburn micro 和 autofac 填充初始 View 模型数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15165351/

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