LEMONADE Dokumentace

Dokumentace.

Patnáct kapitol od instalace a struktury projektu po CLI a produkční nasazení.

Kapitola 7 z 15

Dependency Injection a Service Providers.

Skládejte aplikaci explicitně v providerech a služby používejte přes konstruktorové DI.

Registrace služeb

Provider implementuje ServiceProviderInterface. Jeho register(ContainerBuilderInterface $builder) pouze deklaruje bindingy, aliasy a tagy; neprovádí requestovou ani databázovou práci.

app/Providers/AppServiceProvider.php
<?php

use App\Services\ArticleRepository;
use App\Services\ArticleRepositoryInterface;
use Lemonade\Framework\Container\ContainerBuilderInterface;
use Lemonade\Framework\Core\ServiceProviderInterface;

final class AppServiceProvider implements ServiceProviderInterface
{
    public function register(ContainerBuilderInterface $builder): void
    {
        $builder->scoped(ArticleRepository::class, ArticleRepository::class);
        $builder->alias(ArticleRepositoryInterface::class, ArticleRepository::class);
    }
}

Provider přidejte do app/Config/Providers.yaml. Rozhraní vždy namapujte na konkrétní explicitně registrovanou službu.

Životnost služeb

singleton() sdílí instanci v kořenovém runtime, scoped() jednu instanci v Request, Command nebo Job scope a transient() vytváří novou instanci při každém vyřešení. Side effects po registraci patří do BootableServiceProviderInterface::boot().

Podrobná technická dokumentace na GitHubu