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:
| Middleware | Nestatické middleware třídy se po invoke() přidají do DI |
| Boot classes | Nestatické boot třídy se po boot() přidají do DI |
| Controller parametry | Parametry metod controllerů se resolvují z DI (type-hinted třídy) |
| SubmenuComponent | Parametry 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.
