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 позаботится о самой реализации.