0

Предполагая, что у меня есть экземпляр объекта NSObject, который я создаю в appDelegate, самая простая возможность сделать этот экземпляр доступным для некоторых из моих UIViewControllers.Как устанавливать зависимости от iOS UIViewControllers

Я знаю, что разные подходы, но все они на самом деле не удовлетворяет мои потребности

  1. Делегация я мог бы определить протокол (MHSomeObjectDataSource) и пусть AppDelegate реализовать.
  2. свойства Трюмные на UIViewControllers (MSSomeObject) и всегда установить его после конкретизации из UIViewControllers
  3. Making объект одноэлементно Неа по многим причинам

Моя главная проблема с 1,2 является то, что Я всегда должен убедиться, что вручную установлено свойство/делегат.

Есть ли удобный способ для инъекции зависимостей, о котором я еще не знаю?

ответ

1

Нескольких вариантов, может быть, один из них хорошо подходит для вас:

  • Если вы создаете свои контроллеры программно можно использовать инъекции на основе конструктор и передать эту зависимость в качестве требуемых параметров назначенного инициализатора.
  • Если вы не против того, синглтона или иначе глобально доступный IoC контейнера или завод зависимости можно использовать подкласс, чтобы вызвать введение в awakeFromNib или в специально отведенных инициализаторах ..
  • Аналогично вы можете создать подкласс UIStoryboard переопределить instantiateViewControllerWithIdentifier и впрыснуть зависимостей в контроллерах представлений (опять же, полагая, что для раскадровки есть хороший способ получить их в первую очередь).
  • Если вы работаете с объективом c или совместимыми с OBJ-совместимыми типами, вы можете воспользоваться существующими каркасами DI, такими как http://objection-framework.org/ или http://typhoonframework.org/.

Я думаю, что https://www.objc.io/issues/15-testing/dependency-injection/ - это хорошее обсуждение подходов.