iOS Typhoon DI Framework для замены синглтона в объективе - PullRequest
0 голосов
/ 01 марта 2019

Я работаю с приложением iOS на основе раскадровки / объективной задачи с аутентификацией в Firebase.Я использую облачный firestore для сохранения пользовательских данных - возраста, пола и т. Д. Когда пользователь достигает приложения, я проверяю, вошел ли пользователь в систему или нет, следующий (аналогичный) код

FIRUser *firUser = [FIRAuth auth].currentUser;
if (firUser) {
    // user logged in 
    // fetch updated user date from cloud firestore 
} else {
    // NO logged in user 
}

Когда пользователь вошел в систему, ониможете перейти в другой раздел приложения, в противном случае они увидят страницу регистрации / входа.

Как это выглядит Переход к другим представлениям обычно означает, что я должен вызвать приведенный выше код, чтобы снова выяснить состояние входа в систему - что я не хочу делать.Я хотел бы создать пользовательский объект с зарегистрированным пользователем и данными из firestore и передать его между контроллерами представления.

Синглтон, казалось, отлично справлялся с работой и идеально подходил для моей ситуации, но я столкнулся с Тайфуном!

Первый вопрос: можно ли использовать этот фреймворк?Кажется, неактивные, но очень удивительные технологии.

Во-вторых, вот моя реализация - у меня есть сборка, которая выглядит следующим образом

- (AuthenticatedUser*)authenticatedUser {
    return [TyphoonDefinition withParent:[self user] class:[AuthenticatedUser class] configuration:^(TyphoonDefinition* definition){

        definition.scope = TyphoonScopeSingleton;
    }];
}

И вот как я получаю экземпляр AuthenticatedUser

ModelsAssembly *modelsAssembly = [ModelsAssembly defaultAssembly];

// no default ModelsAssembly set
if( modelsAssembly == nil ){
    modelsAssembly = [[ModelsAssembly new] activated];
    [modelsAssembly makeDefault];
}

authenticatedUser = [modelsAssembly authenticatedUser];

получить один и тот же инициированный класс в разных представлениях кажется, что мне нужно сделать следующее:

  1. использовать TyphoonScopeSingleton в качестве DefinitionScope в сборке
  2. сделать сборку по умолчанию

Мне интересно, может ли кто-нибудь дать мне какое-то руководство по этому поводу.

1 Ответ

0 голосов
/ 02 марта 2019

Первый вопрос: можно ли использовать этот фреймворк?Кажется, немного неактивная, но очень удивительная технология.

Ответ:

Тайфун по-прежнему является лучшим выбором библиотеки инъекций зависимости для Objective-C.Это полная функциональность, поэтому новые функции, как правило, не добавляются, однако поддерживается и поддерживается AppsQuick.ly.

Если вы работаете со Swift, Fiery Crucible - это превосходный DI-фреймворк.Он обладает большинством функций Typhoon, прост в использовании и лишен недостатков некоторых других сред Swift.

Чтобы получить один и тот же инициируемый класс в разных представлениях, мне нужно сделать следующее:

  1. использовать TyphoonScopeSingleton в качестве DefinitionScope в сборке
  2. сделать сборку по умолчанию

Мне интересно, может ли кто-нибудь дать мне несколько советов по этому поводу.

Ответ:

Это не правильный подход.Идея состоит в том, чтобы иметь один экземпляр Typhoon, создать в корне композиции , и тогда он будет жить вместе с вашим приложением в течение всего срока службы работающего (переднего или заднего) приложения.,

  • Мы не запрашиваем зависимости у Typhoon, мы говорим ему вводить зависимости в контроллер, службу или другой класс.
  • Единственное исключение из этого - при использовании фабричного шаблона , где у нас есть смесь статических зависимостей, наряду с аргументами времени выполнения, например: "дайте мне контроллер вида заказа для этого пользователя».В этом случае мы внедряем саму сборку.

Для iOS Typhoon предоставляет способ начальной загрузки вашей сборки при запуске, с раскадровками или без них. образец показывает, как это сделать, вместе с этим руководством для раскадровок.

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

...