我正在使用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调用每次都会返回相同的实例。
我在这里做错了什么?
答案 0 :(得分:0)
您注册了一个已经实例化的对象。
SimpleIoc不会使用此重载创建自己的实例。它总是返回configService
。您可能需要在lambda中执行实例化,因为您正在使用工厂重载,或者您可以通过传递ConfigService
类型来更轻松地做到这一点。 SimpleIoc将负责实例化本身。