【问题标题】:Populate initial view model data using caliburn micro and autofac使用 caliburn micro 和 autofac 填充初始视图模型数据
【发布时间】:2013-02-16 09:41:38
【问题描述】:

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

每次我觉得自己要到达某个地方时,我总是对如何为我的根视图模型初始化数据感到困惑。此视图模型需要注入一个“类别”视图模型列表。此“类别”视图模型列表将在应用初始化期间加载。

那么,如何向 autofac 注册我的根“Navigator”视图模型并通知 autofac 在创建新实例时需要注入数据?

如果没有 caliburn 和 autofac,我只需创建自己的启动方法,加载我的数据,然后将其注入到我的视图模型中。使用 caliburn,我试图覆盖引导程序中的配置方法,因为这是我应该使用 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 注册视图模型的方式:

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

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

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

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

【问题讨论】:

    标签: c# wpf mvvm autofac caliburn


    【解决方案1】:

    这看起来像是关于 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 documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      • 2014-01-28
      相关资源
      最近更新 更多