Доля прыща DI обесценилась. Что теперь?

В Pimple 1.0 я имел обыкновение делиться экземплярами классов вот так:

$app['some_service'] = $app->share(function () {
    return new Service();
});

Сейчас это кажется устаревшим, и я не могу найти новый способ сделать это.

3 ответа

Решение

В Pimple 1.0 (Silex 1) вы делаете это:

$app['shared_service'] = $app->share(function () {
    return new Service();
});

$app['non_shared_service'] = function () {
    return new Service();
};

В Pimple 3.0 (Silex 2) вы делаете это (что противоположно!):

$app['shared_service'] = function () {
    return new Service();
};

$app['non_shared_service'] = $app->factory(function () {
    return new Service();
});

Кажется, что pimple 3.0 (который использует Silex 2.0) по умолчанию всегда возвращает один и тот же экземпляр службы. Вы должны быть откровенны в этом и использовать фабричную функцию, если вам не нужно это поведение.

Зависит от версии Pimple!

На прыщ 1.0

$container['shared'] = $container->shared(function(){
    return new Class();
});
$container['non_shared'] = function() {
    return new Class();
};

На прыщ 3.0

$container['shared'] = function() {
    return new Class();
};
$container['non_shared'] = $container->factory(function() {
    return new Class();
});

Помните, что при создании общего сервиса их возврат не изменится. Когда вы создаете не разделяемый сервис, каждый раз, когда вы используете, Pimple будет предоставлять вам новый экземпляр этого сервиса.

Другие вопросы по тегам