导航中的构造函数DI使用Caliburn.Micro可能吗?

时间:2016-08-10 22:57:31

标签: wpf caliburn.micro

有没有比这更好的方法?:

ActivateItem(Ioc.Get<PageOneViewModel>());

我不是服务定位器模式的忠实粉丝。是否还有其他DI挂钩可用于此类导航?

1 个答案:

答案 0 :(得分:1)

您可以使PageOneViewModel成为指挥的依赖(假设您的指挥通过集装箱解决)。

在您的app bootstrapper中,注册PageOneViewModel

container = new SimpleContainer();
//...
container
    .PerRequest<MyViewModel>()
    .PerRequest<PageOneViewModel()>;

在你的指挥中:

public MyViewModel : Conductor
{
    // require PageOneViewModel as a dependency
    public MyViewModel(PageOneViewModel pageOne)
    {
        PageOne = pageOne;
    }

    PageOneViewModel PageOne { get; set; }

    public override void OnActivate()
    {
        base.OnActivate();
        ActivateItem(PageOne);
    }
}

请注意,我在这里使用SimpleContainer(Caliburn Micro附带的那个)。它应该与其他DI容器一起使用。