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

问题描述 投票:1回答:1

我正在使用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
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.