2015-09-30 2 views
2

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

Чтобы привести пример: мой базовый стек данных настроен так, как это рекомендовано here. Поскольку инициализация магазина может занять некоторое время и заблокировать основной поток, это делается в фоновом потоке, и основной поток уведомляется, когда объект готов к использованию.

У меня есть объект, который обертывает эту логику, и мой делегат приложения в настоящее время ждет ответного вызова, чтобы получить уведомление о готовности базы данных. Затем объект вводится в другие объекты на моем графике через инъекцию свойств.

Я хотел бы заменить этот подход внедрения свойств с помощью Typhoon Assembly, но я не вижу способа справиться с асинхронным характером инициализации объекта базы данных. Если это невозможно, могу ли я сохранить инициализацию объекта базы данных из Typhoon, но вручную предоставить результирующий объект для сборки для использования с проводным графиком после его готовности?

Поблагодарили бы за любые советы!

ответ

1

У нас нет специальной поддержки для этого. , ,

Области применения:

Typhoon обеспечивает various scopes. Если объекты, которые используют асинхронно initalized магазина из следующих областей:

  • TyphoonScopeObjectGraph
  • TyphoonScopePrototype
  • TyphoonScopeLazySingleton
  • TyphoonScopeWeakSingleton

. , , то есть любой объем, за исключением TyphoonScopeSingleton, тогда не требуется никаких специальных настроек, если вы впервые представили контроллер представления не зависит от хранилища основных данных.

Чтобы перейти от одного графа объекта к другому, вы можете использовать this process, или если вы используете раскадровки и Objective-C только auto-injection.

вручную указать объект для инъекций:

Вы можете зарегистрировать объект, который производит другой объект like this или просто предоставить собственный объект для участия в собрании.

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

Here's a sample/example for setting up Typhoon with Core Data, который может быть изменен для поддержки шаблона в статье, с которой вы связались в своем вопросе.

+0

NB: Если вы используете Swift, то Typhoon, так как динамическая библиотека ObjC имеет следующие ограничения: https://github.com/appsquickly/Typhoon/wiki/Swift-Quick-Start#important. , аналогично использованию KVO или других особенностей какао. –

+0

Привет, Джаспер, спасибо!Могу ли я сделать что-то вроде отдельной сборки для контроллера базы данных, поэтому я могу создать экземпляр и подождать, пока он будет готов, прежде чем переходить на вторую сборку, которая также знает об этом объекте контроллера и может вставлять его в другие объекты на графике ? Можно ли делиться определениями между сборками? Я использую Objective-C и раскадровки. Мой начальный контроллер представления по существу является spinner, когда все инициализируется, и я перехожу на первый правильный контроллер представления после завершения всех асинхронных задач начальной загрузки. – Craig

+0

Вы можете модулировать сборки: https://github.com/appsquickly/Typhoon/wiki/Modularizing-Assemblies. , , имейте в виду, что это обеспечивает один основной TyphoonComponentFactory и, таким образом, дает некоторые приятные функции. , , или у вас может быть два отдельных экземпляра Typhoon, и кормить объект, созданный один к другому - Typhoon не будет знать или заботиться о том, чтобы экземпляр появился из другого экземпляра Typhoon. –

Смежные вопросы