【问题标题】:Constructor DI in Navigation Using Caliburn.Micro Possible?在导航中使用 Caliburn.Micro 的构造函数 DI 可能吗?
【发布时间】:2016-08-11 10:10:16
【问题描述】:

还有比这更好的方法吗?:

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

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

【问题讨论】:

    标签: wpf caliburn.micro


    【解决方案1】:

    您可以使 PageOneViewModel 成为您的导体的依赖项(假设您的导体正在通过容器解析)。

    在您的应用引导程序中,注册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 容器。

    【讨论】:

    • 感谢 Doom5。这看起来是一个很好的解决方案。如果我的指挥正在进行大量的视图,它可能会变得有点沉重。预先加载它们。但我想这是权衡。在任何情况下,即使 Caliburn.Micro 确实有一个 DI 钩子可以注入到 ActivateItem 中,它也最想在后台做一个服务位置。我敢肯定马克·西曼可能对此事有强烈的看法:)
    猜你喜欢
    • 1970-01-01
    • 2016-07-26
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 2010-12-19
    • 1970-01-01
    相关资源
    最近更新 更多