Сервис Symfony 2 с несколькими экземплярами? - PullRequest
14 голосов
/ 26 марта 2012

Я прочитал это: http://symfony.com/doc/current/book/service_container.html

Там сказано:

$mailer = $this->get('my_mailer');

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

Как сделать так, чтобы в моем сервисе было несколько экземпляров, т. Е. Всякий раз, когда я получаю сервис, мне дают новый экземпляр?Что-то вроде $this->getNew() или что-то?

Ответы [ 2 ]

31 голосов
/ 26 марта 2012

Вы говорите о сфере услуг. Вы можете посмотреть их здесь . Короче говоря, определите вашу службу как прототип области вместо контейнера по умолчанию, и контейнер внедрения зависимости будет заботиться о создании нового объекта каждый раз, когда вы запрашиваете его:

services:
    my_service:
        class: Someclass
        scope: prototype

Примечание: начиная с Symfony2.8, scope: prototype был заменен на shared: false.

# Symfony >= 2.8
services:
    my_service:
        class: Someclass
        shared: false
7 голосов
/ 04 марта 2016

В Symfony> = 2.8 атрибут области действия устарел, а в версии 3 удален.Вам необходимо использовать общие настройки, как описано здесь http://symfony.com/doc/current/cookbook/service_container/shared.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...