【发布时间】:2018-04-20 12:30:35
【问题描述】:
我正在使用 MVVM Light Toolkit 尤其是 SimpleIoc 构建 WPF 应用程序。
我有一个动态创建子视图模型的父视图模型。这样做时,我使用“标准”依赖注入将 IConfigService 作为参数传递给构造函数。我希望 IConfigService 成为每个子视图模型的唯一实例。所以我试试这个:
IConfigService service = SimpleIoc.Default.GetInstance<IConfigService>(key);
ChildViewModel vm = new ChildViewModel(service);
其中 key 是每个子视图模型的唯一标识符。根据 MVVM Light 和 SimpleIoc 的文档,这个 GetInstance 方法:
...提供了一种方法来获取与给定键对应的给定类型的实例。如果之前没有使用此键实例化任何实例,则会创建一个新实例。
还有一个说明,这个类必须是之前注册过的,否则返回null。就我而言,在 ViewModelLocator 中是这样的:
var configService = new ConfigService();
SimpleIoc.Default.Register<IConfigService>(() => configService);
但是,GetInstance 调用每次都返回相同的实例。
我在这里做错了什么?
【问题讨论】:
标签: mvvm-light simpleioc