Регистрация и разрешение контейнеров DI в Prism 7 - формы Xamarin - PullRequest
0 голосов
/ 15 мая 2018

Я использую призму 7 для моего нового приложения форм xamarin. Я прошел этот документ.

У меня есть пара вопросов:

  1. Есть несколько интерфейсов DI, которые я регистрирую после запуска приложения. Мы можем использовать IContainerRegistry в app.xaml.cs для регистрации, но если мы хотим зарегистрироваться или разрешить другие страницы, есть ли способ заставить это сделать, кроме сохранения экземпляров IContainerRegistry и IContainerRegistry из app.xaml .cs и использовать его, где мы хотим?

  2. Чтобы зарегистрировать тип, синтаксис:

    ContainerRegistry.RegisterInstance<ITextService>(new TextService());

Но как мы можем зарегистрировать синглтон? Я видел несколько примеров, но я не очень понял, как это сделать? кто-нибудь может показать пример?

UPDATE:

Чтобы зарегистрировать синглтон, Синтаксис выглядит как
containerRegistry.RegisterSingleton<ILoggerFacade, EmptyLogger>(); но если мы просто передадим тип без создания экземпляра (в данном случае, экземпляра EmptyLogger), как мы можем правильно их зарегистрировать?

1 Ответ

0 голосов
/ 15 мая 2018

Чтобы зарегистрировать тип, синтаксис: ContainerRegistry.RegisterInstance<ITextService>(new TextService());

это регистрирует экземпляр не типа, кстати, для регистрации типа do ContainerRegistry.Register<IAnInterface, SomeImplementation>();

Но как мы можем зарегистрировать синглтон?

ContainerRegistry.RegisterSingleton<ITextService, TextService>(); делает это, и, между прочим, экземпляр является одноэлементным по своей природе (поскольку контейнер di всегда должен внедрить один зарегистрированный вами экземпляр, поскольку он не может самостоятельно создавать новые экземпляры)

есть ли способ заставить это сделать, кроме как сохранить экземпляр IContainerRegistry и IContainerRegistry из app.xaml.cs и использовать его там, где нам нужно?

Я рекомендую регистрировать все в одном месте, а не разбрасывать регистрации по всему проекту. Но если вы полны решимости, вы можете ввести IContainerRegistry в любом месте и зарегистрировать ваши материалы.

...