我正在同时学习 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 注册 viewModel 的方式:
protected override void Configure()
{
var builder = new ContainerBuilder();
builder.RegisterType<CategoryViewModel>().AsSelf();
builder.RegisterType<NavigatorViewModel>().AsSelf();
...
container = builder.Build();
}
在注册我的 NavigatorViewModel 时,我如何告诉 autofac 它也需要注入 CategoryViewModels 列表?
我猜我会在 caliburn 引导程序中加载我的数据,但我现在不确定如何将它全部连接起来。