Skip to content

Latest commit

 

History

History
65 lines (46 loc) · 1.36 KB

getting-started.md

File metadata and controls

65 lines (46 loc) · 1.36 KB

Getting Started

← Back to index

Installation

composer require gacela-project/container

Requirements:

  • PHP >= 8.3
  • PSR-11 Container Interface

Basic Usage

use Gacela\Container\Container;

// Simple auto-wiring
$container = new Container();
$instance = $container->get(YourClass::class);

How It Works

The container automatically resolves dependencies based on type hints:

  • Primitive types: use their default values (a default must be provided)
  • Classes: instantiated and their dependencies resolved recursively
  • Interfaces: resolved using the bindings defined in the container

Example

class UserService {
    public function __construct(
        private UserRepository $repository,
        private LoggerInterface $logger,
    ) {}
}

class UserRepository {
    public function __construct(private PDO $pdo) {}
}

// Setup
$bindings = [
    LoggerInterface::class => FileLogger::class,
    PDO::class => new PDO('mysql:host=localhost;dbname=app', 'user', 'pass'),
];

$container = new Container($bindings);

// Auto-resolves UserService -> UserRepository -> PDO
$service = $container->get(UserService::class);

Where to next