繁体   English   中英

使用caliburn micro和autofac填充初始视图模型数据

[英]Populate initial view model data using caliburn micro and autofac

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

每次我想到达某个地方时,总是会为如何为根视图模型初始化数据而烦恼。 该视图模型需要具有注入的“类别”视图模型的列表。 此“类别”视图模型列表将在应用初始化期间加载。

因此,如何在autofac中注册根“ Navigator”视图模型,并在创建新实例时通知autofac该视图模型需要注入数据?

没有caliburn和autofac,我只需创建自己的启动方法,加载数据,然后将其注入到我的viewmodel中。 使用caliburn,我试图覆盖引导程序中的configure方法,因为这是我应该向ioc容器注册类的地方。

我的根视图模型:

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注册viewModels的方式:

protected override void Configure()
{
    var builder = new ContainerBuilder();

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

在注册NavigatorViewModel时,如何告诉autofac它也需要注入CategoryViewModels列表?

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

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

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

您可以在WithParameter方法上查看AutoFac文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM