Регистрация и отмена регистрации услуг в Дриёке - PullRequest
0 голосов
/ 19 декабря 2018

Я создаю приложение в Xamarin.Forms, используя Prism.Forms.Это работает довольно хорошо, используя Unity IOC.Поскольку в Unity отсутствуют некоторые функции, я хочу перейти на Dryioc.

Поскольку компоненты (например, страницы) приложения изменяются во время выполнения, поэтому мне нужно динамически регистрировать и отменять регистрацию этих компонентов.Как это сделать в Dryioc?Кажется возможным с использованием Container.OpenScope (), но этот подход создает новый контейнер, который не может использоваться Prism.Prism создает и использует один контейнер на весь срок службы приложения.Я прав?

Так есть ли другое решение?

1 Ответ

0 голосов
/ 19 декабря 2018

Кажется возможным с помощью Container.OpenScope ()

Нет, DryIoc не разделяет регистрации между областями, они всегда идут в корневой контейнер .

Вы можете перерегистрировать новую услугу, передав параметр IfAlreadyRegistered.Replace.Чтобы это работало, вам также нужно изменить как старую, так и новую регистрацию, чтобы использовать Setup.With(asResolutionCall: true).Вот причина, по которой .

Начальная настройка:

container.Register<MyServiceUser>();
container.Register<IService, MyService>(
    setup: Setup.With(asResolutionCall: true));

Замена IService:

container.Register<IService, MyReplacementService>(
    ifAlreadyRegistered: IfAlreadyRegistered.Replace,
    setup: Setup.With(asResolutionCall: true));
...