Dependency Injection

Třída Moony\bootstrap\core\factories\DependencyInjection spravuje singleton instance služeb. Při prvním požadavku se třída automaticky vytvoří a uloží do kontejneru.

DependencyInjection::get(string $className)Vrátí instanci třídy. Pokud neexistuje v kontejneru, vytvoří ji a uloží.
DependencyInjection::has(string $className)Vrátí true pokud je třída v kontejneru
use Moony\bootstrap\core\factories\DependencyInjection;

// Získání instance služby
$myService = DependencyInjection::get(MyService::class);

// Kontrola existence
if(DependencyInjection::has(MyService::class)) {
    // ...
}

Jak se DI používá

DI kontejner se plní automaticky:

MiddlewareNestatické middleware třídy se po invoke() přidají do DI
Boot classesNestatické boot třídy se po boot() přidají do DI
Controller parametryParametry metod controllerů se resolvují z DI (type-hinted třídy)
SubmenuComponentParametry Closure v render/handlePost se resolvují z DI
// Controller — parametry se automaticky resolvují z DI
#[Route('/dashboard')]
public function dashboard(MyService $myService): View
{
    $data = $myService->getData();
    return new View('account/dashboard', ['data' => $data]);
}
Většina frameworkových služeb (Request, Response, User, ...) je statická a nepotřebuje DI. DI se používá primárně pro aplikační služby a nestatické třídy.