我是IoC的新手,我正在努力遵循应用它的最佳实践。 我有一个ListViewModel,我想在那里创建一个新的EditViewModel,它接受注入必须修改的对象。
我认为解决方案可能是将包含此对象的消息发送到IoC Container,然后将其传递给EditViewModel。
我可以这样做吗?还有更好的办法吗?
非常感谢!
答案 0 :(得分:1)
如果您希望视图模型创建其他视图模型,则需要创建视图模型工厂。您的ListViewModel
会将此视图模型工厂视为依赖项(例如通过构造函数注入),然后当它想要创建编辑视图模型时,它可以执行以下操作:
var editViewModel = this.EditViewModelFactory.Create(modelToEdit);
或
var editViewModel = this.EditViewModelFactory.Create();
editViewModel.SetModel(modelToEdit);
您希望通过IoC容器解析编辑视图模型工厂。 Castle Windsor和Ninject等容器允许自动工厂注册。在这种情况下,您只定义工厂的接口,容器实际上实例化了一个为您实现此接口的类型。
您当然不希望您的申请通过调解员与您的容器交谈。