Как определять необщие сервисы

Как определять необщие сервисы

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

Чтобы получать новый экземпляр каждый раз, установите настройку shared в значение false в вашем определении сервиса:

  • YAML
    1
    2
    3
    4
    5
    # app/config/services.yml
    services:
        AppBundle\SomeNonSharedService:
            shared: false
            # ...
    
  • XML
    1
    2
    3
    4
    <!-- app/config/services.xml -->
    <services>
        <service id="AppBundle\SomeNonSharedService" shared="false" />
    </services>
    
  • PHP
    1
    2
    3
    4
    5
    6
    // app/config/services.php
    use Symfony\Component\DependencyInjection\Definition;
    use AppBundle\SomeNonSharedService;
    
    $container->register(SomeNonSharedService::class)
        ->setShared(false);
    

Теперь, каждый раз, когда вы запрашиваете AppBundle\SomeNonSharedService из контейнера, вам будет передан новый экземпляр.

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.