MVVM-Light SimpleIoc:无法动态创建多个实例

时间:2018-04-20 12:30:36

标签: mvvm-light simpleioc

我正在使用MVVM Light Toolkit构建一个WPF应用程序,特别是SimpleIoc。

我有一个父视图模型,可以动态创建子视图模型。这样做时,我使用“标准”依赖注入将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调用每次都会返回相同的实例。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

您注册了一个已经实例化的对象。

SimpleIoc不会使用此重载创建自己的实例。它总是返回configService。您可能需要在lambda中执行实例化,因为您正在使用工厂重载,或者您可以通过传递ConfigService类型来更轻松地做到这一点。 SimpleIoc将负责实例化本身。

相关问题