Новые в Symfony 2.8: Устаревшие Scopes и введение в Shared Services

Service scopes контролирует, как долго экземпляр службы используется контейнером. Компонент Dependency Injection обеспечивает три диапазона:

  • container, один и тот же экземпляр используется каждый раз, когда вы запрашиваете сервисы из контейнера (по умолчанию один);
  • prototype, создается новый экземпляр каждый раз, когда вы запрашиваете сервис;
  • request, создается новый экземпляр для каждого подзапроса (не доступны за пределами запроса).

Сервис request_stack, введенный в Symfony 2.4, решил проблемы, связанные с request scope и имеющие дело с объектом Request в службах. Это заставило нас пересмотреть всю «scope» концепцию , и мы решили упростить DependencyInjection компонент  объявить устаревшим в Symfony 2.8 и удалить его в Symfony 3.0.

Новая опция shared

Вместо scope, определения услуг теперь могут настроить с помощью параметра shared. По умолчанию эта опция true, что эквивалентно предыдущему container scope. Установите его в false, чтобы получить тот же результат, как и в предыдущем prototype scope:

# app/config/services.yml
# BEFORE
services:
    app.my_service:
        class: AppBundle\Service\MyService
        scope: prototype

# AFTER
services:
    app.my_service:
        class:  AppBundle\Service\MyService
        shared: false

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

Источник: http://symfony.com/blog/new-in-symfony-2-8-deprecating-scopes-and-introducing-shared-services

Добавить комментарий

Ваш адрес email не будет опубликован.

четыре × 4 =