2013-03-01 89 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