Property Dependency Injection Container

1.1.7 2021-02-09 10:40 UTC

This package is auto-updated.

Last update: 2024-04-14 13:18:10 UTC


README

Build Status

PDIC

Меленький и в тоже время мощный контейнер внедрения зависимостей через публичные свойства, с использованием карты зависимостей

Установка

Перед тем как использовать PDIC в вашем проекте, добавьте его в файл composer.json:

./composer.phar require cheevauva/pdic "1.1.*"

Использование

Объявление сервисов

Сервис - это объект, который что-то делает как часть более крупной системы. Примеры сервисов: подключение к базе данных, шаблонизатор или почтовая программа

$map = [
    '?session_storage' => SessionStorage::class,
    '?session' => Session::class,
    SessionStorage::class => [
        '^1' => '@sessionId',
    ],
    Session::class => [
        '^1' => '?session_storage'
    ],
];
$container = new \PDIC\Container($map, [
    'sessionId' => 'SESSION_ID',
]);

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

Использовать определенные сервисы очень просто:

$container->get('session');

Вышеупомянутый вызов примерно эквивалентен следующему коду:

$storage = new SessionStorage('SESSION_ID');
$session = new Session($storage);

Объявление фабричных сервисов

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

$map = [
    '?session_storage' => SessionStorage::class,
    '?session' => '*' . Session::class,
    SessionStorage::class => [
        '^1' => '@sessionId',
    ],
    Session::class => [
        '^1' => '?session_storage'
    ],
];

Теперь каждый вызов:

$container->get('session');

возвращает новый экземпляр Session

Объявление параметров

Определение параметра позволяет упростить настройку сущностей в вашем контейнере. Параметры передаются при создании экземпляра контейнера:

$container = new \PDIC\Container([
    '?filesystem' => Filesystem::class,
    Filesystem::class => [
        '^1' => '@basePath',
    ]
], [
    'basePath' => __DIR__ . '/',
]);