2013-03-01 73 views
1

我正在同时学习Caliburn.Micro和Autofac。我正在写一个简单的应用程序,所以我可以教自己如何正确使用这两种技术。使用caliburn micro和autofac填充初始视图模型数据

每当我想到我到某个地方时,我总是被绊倒在如何为我的根视图模型初始化我的数据。该视图模型需要注入一个“类别”视图模型列表。这个“类别”视图模型列表将在应用程序初始化期间加载。

那么,如何使用autofac注册我的根“Navigator”viewmodel,并告知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]; 
    } 
} 

这里是我正在注册的ViewModels与Autofac:

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

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

登记时我NavigatorViewModel我怎么告诉autofac,它需要有名单CategoryViewModels注入以及?

我在猜测我会在caliburn引导程序中加载我的数据,但我只是不确定如何在此刻挂接它。

回答

0

这看起来像一个关于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

相关问题