1

我正在学习如何使用 Caliburn.Micro 作为 WPF 应用程序的 MVVM 框架。在视图 XI 中,希望使用 显示另一个视图ActivateItemY。在这个视图 Y 中,当用户单击一个按钮时,我需要将另一个视图 Z 显示为一个对话框。WindowManage所以我需要一个视图 Y的实例。

这意味着WindowManage将必须注入到 Y 的视图模型中,所以我可以使用它来调用windowManager.ShowDialog()视图 Z。所以我想我应该在 Y 的视图模型中添加一个构造函数,它接受一个IWindowManager参数。

public YViewModel( IWindowManager windowManager) { ... }

Caliburn.Micro 可以自动将 viewmanager 的实例注入到YViewModel? 没有WindowManage我会写

ActivateItem(new YViewModel());

但这在我需要的时候不起作用......当需要一个实例时我应该WindowManage怎么写?ActivateItemYViewModelWindowManage

4

1 回答 1

3

Caliburn.Micro 本身不是 IoC 容器。它的内置引导程序有一个简单的 IoC 实现(而是一个服务定位器),它不能像你想要的IWindowManager构造函数参数那样进行依赖注入。

尽管您的解决方案有效,但它只会在简单的情况下这样做,并且从您的类中调用服务定位器也被认为是不好的做法。

周围有很多好的 IoC 容器。我建议看看 Unity 或 Autofac。对于这两者,您都可以在 Internet 上找到适用的 Caliburn.Micro 引导程序。

例如,在 Autofac 中,您将有如下一行:

builder.Register<IWindowManager>(c => new MyWindowManager()).InstancePerLifetimeScope();

在您的自定义 Autofac 引导程序中。每当通过 IoC 容器实例化 YViewModel 时,都会注入相同的 MyWindowManager 实例。

于 2011-02-19T22:38:55.743 回答