【问题标题】:MVVM-Light SimpleIoc: Can't create multiple instances dynamicallyMVVM-Light SimpleIoc:无法动态创建多个实例
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多