У меня есть класс A, который вводится в нескольких местах. Я хотел бы внедрить один и тот же экземпляр A везде - своего рода синглтон, но с инъекцией.
Возможно ли это сделать с Тайфуном?
У меня есть класс A, который вводится в нескольких местах. Я хотел бы внедрить один и тот же экземпляр A везде - своего рода синглтон, но с инъекцией.
Возможно ли это сделать с Тайфуном?
В Typhoon есть три области видимости, которые вы можете использовать для этого: TyphoonScopeSingleton, TyphoonScopeLazySingleton и TyphoonScopeWeakSingleton.
Чтобы установить область действия компонента:
- (PFRootViewController *)rootViewController
{
definition.scope = TyphoonScopeSingleton;
}
Использование этой области дает все преимущества синглтона, в то время как шаблон DI позволяет избежать недостатков.
Подробнее о прицелах Typhoon:
Многие контейнеры внедрения зависимостей на других языках имеют область по умолчанию singleton, тогда как в Typhoon областью по умолчанию является TyphoonScopeObjectGraph
. Наличие области singleton по умолчанию имеет смысл для серверных сред, где приложение может обслуживать любой вариант использования в данный момент времени.
Между тем, Typhoon предназначен для мобильных и настольных сред, поэтому область графа объектов предназначена для загрузки сборки в память (пример контроллера представления), а затем отбрасывания ее после перехода к другому варианту использования. Любые общие ссылки, такие как циклическая зависимость, указывающая на родителя (например, на делегата), будут общими.
Конечно, несмотря на то, что это значение по умолчанию, бывают случаи, когда требуются другие области действия. Дополнительную информацию можно найти в разделе области действия руководства пользователя.