MVVM-Light SimpleIoc: невозможно создать несколько экземпляров динамически

Я создаю приложение WPF, используя MVVM Light Toolkit и, в частности, SimpleIoc.

У меня есть родительская viewmodel, которая динамически создает дочерние viewmodels. При этом я использую "стандартную" инъекцию зависимостей для передачи IConfigService в качестве параметра конструктору. Я хочу, чтобы IConfigService был уникальным экземпляром для каждой дочерней модели представления. Итак, я пытаюсь это:

IConfigService service = SimpleIoc.Default.GetInstance<IConfigService>(key);
ChildViewModel vm = new ChildViewModel(service);

Где ключ - это уникальный идентификатор для каждой дочерней модели представления. Согласно документации MVVM Light и SimpleIoc этот метод GetInstance:

... предоставляет способ получить экземпляр данного типа, соответствующий данному ключу. Если ни один экземпляр не был создан с этим ключом ранее, будет создан новый экземпляр.

Также есть замечание, что класс должен быть зарегистрирован раньше, иначе он возвращает ноль. В моем случае это было в ViewModelLocator:

var configService = new ConfigService();
SimpleIoc.Default.Register<IConfigService>(() => configService);

Однако вызов GetInstance каждый раз возвращает один и тот же экземпляр.

Что я здесь не так делаю?

1 ответ

Вы зарегистрировали уже созданный объект.

SimpleIoc не создает свои собственные экземпляры с этой перегрузкой. Всегда возвращается configService, Либо вам нужно выполнить инстанцирование внутри лямбды, потому что вы используете фабричную перегрузку, либо вы можете сделать это проще, просто передав ConfigService тип. SimpleIoc позаботится о самой реализации.

Другие вопросы по тегам