corex / container
Simple Dependency Injection Container
Installs: 94
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/corex/container
Requires
- php: ^8.1
- psr/container: ^2.0
Requires (Dev)
- phpstan/phpstan: ^1.9
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2026-02-08 15:29:56 UTC
README
Breaking changes - this package has been rewritten from scratch to be more strict and simple to use.
- Support for PSR-11 Container Interface.
- Support for setting default parameters on definitions.
Examples
Make a class without binding.
$myClass = (new Container())->make(MyClass::class);
Type-hints will be resolved if they are bound in advance.
Make a class with binding and parameters.
$containerBuilder = new ContainerBuilder(); $containerBuilder->bind('myClass', MyClass::class) ->setArgument('firstname', 'Roger'); $container = new Container($containerBuilder); $myClass = $container->make('myClass', [ 'lastname' => 'Moore' ]);
Make a class binding by class.
$containerBuilder = new ContainerBuilder(); $containerBuilder->bindClass(MyClass::class); $container = new Container($containerBuilder); $myClass = $container->get(MyClass::class);
Make a class binding by implemented interface.
interface MyClassInterface { } class MyClass implements MyClassInterface { } $containerBuilder = new ContainerBuilder(); $containerBuilder->bindClassByInterface(MyClass::class); $container = new Container($containerBuilder); $myClass = $container->get(MyClassInterface::class);
Factory - closure
interface MyClassInterface { } class MyClass implements MyClassInterface { } $containerBuilder = new ContainerBuilder(); $containerBuilder->bindClassByInterface(MyClass::class) ->setFactory(function (ContainerInterface $container) { return $container->make(MyClass::class); }); $container = new Container($containerBuilder); $myClass = $container->get(MyClassInterface::class);
Container will be parsed as first and only argument on Closure and can be used to instantiate and resolve dependencies.
Factory - invokable
interface MyClassInterface { } class MyClass implements MyClassInterface { } class MyFactory { public function __invoke(ContainerInterface $container): MyClassInterface { return $container->make(MyClass::class); } } $containerBuilder = new ContainerBuilder(); $containerBuilder->bindClassByInterface(MyClass::class) ->setFactory(MyFactory::class); $container = new Container($containerBuilder); $myClass = $container->get(MyClassInterface::class);
Container will be parsed as first and only argument on __invoke() and can be used to instantiate and resolve dependencies.
Factory - dynamic method
interface MyClassInterface { } class MyClass implements MyClassInterface { } class MyFactory { public function createMyClass(ContainerInterface $container): MyClassInterface { return $container->make(MyClass::class); } } $containerBuilder = new ContainerBuilder(); $containerBuilder->bindClassByInterface(MyClass::class) ->setFactory(MyFactory::class, 'createMyClass'); $container = new Container($containerBuilder); $myClass = $container->get(MyClassInterface::class);
Container will be parsed as first and only argument on createMyClass() and can be used to instantiate and resolve dependencies.
Factory - static method
interface MyClassInterface { } class MyClass implements MyClassInterface { } class MyFactory { public static function createMyClass(ContainerInterface $container): MyClassInterface { return $container->make(MyClass::class); } } $containerBuilder = new ContainerBuilder(); $containerBuilder->bindClassByInterface(MyClass::class) ->setFactory(MyFactory::class, '::createMyClass'); $container = new Container($containerBuilder); $myClass = $container->get(MyClassInterface::class);
Container will be parsed as first and only argument on createMyClass() and can be used to instantiate and resolve dependencies.
Notice the "::" on
$factoryMethodwhich indicate a static method.
Parameters
Parameters will be resolved in following order:
- Type-hint ContainerInterface will be resolved to instance of container.
- Default parameters specified on definition.
- Default parameters in constructor/method.
- Specified parameters when calling make() and not already resolved.