Strata doesn’t ship a container. It uses whatever PSR-11 container you give it. PHP-DI, League\Container, Symfony — your choice.
use DI\ContainerBuilder;
use Strata\App;
$containerBuilder = new ContainerBuilder();
$containerBuilder->addDefinitions([
LoggerInterface::class => fn() => new Monolog\Logger('app'),
UserRepository::class => fn(ContainerInterface $c) => new UserRepository($c->get(PDO::class)),
]);
$container = $containerBuilder->build();
$app = new App($container);
$app->get('/users/{id}', function(int $id, UserRepository $users) {
return $users->find($id); // $users is auto-injected
});
$app->run();
Typehint anything in your route handlers or middleware. If the container can build it, Strata injects it.
Don’t want a container? Pass dependencies manually. Strata won’t complain.
$users = new UserRepository($pdo);
$app->get('/users/{id}', function(int $id) use ($users) {
return $users->find($id);
});