我可以从IoC Container访问Messenger吗?

时间:2012-08-24 23:14:26

标签: mvvm inversion-of-control ioc-container messenger

我是IoC的新手,我正在努力遵循应用它的最佳实践。 我有一个ListViewModel,我想在那里创建一个新的EditViewModel,它接受注入必须修改的对象。

我认为解决方案可能是将包含此对象的消息发送到IoC Container,然后将其传递给EditViewModel。

我可以这样做吗?还有更好的办法吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

如果您希望视图模型创建其他视图模型,则需要创建视图模型工厂。您的ListViewModel会将此视图模型工厂视为依赖项(例如通过构造函数注入),然后当它想要创建编辑视图模型时,它可以执行以下操作:

var editViewModel = this.EditViewModelFactory.Create(modelToEdit);

var editViewModel = this.EditViewModelFactory.Create();
editViewModel.SetModel(modelToEdit);

您希望通过IoC容器解析编辑视图模型工厂。 Castle Windsor和Ninject等容器允许自动工厂注册。在这种情况下,您只定义工厂的接口,容器实际上实例化了一个为您实现此接口的类型。

您当然不希望您的申请通过调解员与您的容器交谈。