Simple, extensible dependency injection container with parameters and service tagging. Implements container interop.
$container = new Container();
$container->register('foobar', function (Container $container) {
return new \stdClass();
});
Extension classes should be passed as the first argument to the container (the user configuration is the second argumnet).
$container = new Container(
[
MyExtension::class
],
[
'foo.bar' => 'my_new_value',
]
);
$container->init(); // will trigger loading of the extensions.
class MyExtension implements ExtensionInterface
{
public function load(Container $container)
{
$container->register('my_service', function (Container $container) {
$service = new MyService(
$container->getParameter('foo_bar'),
$container->get('some_other_service')
);
foreach ($container->getServiceIdsForTag('tag') as $serviceId => $params) {
$service->add($container->get($serviceId));
}
return $service;
});
$container->register('tagged_service', function (Container $container) {
return new MyService(
$container->getParameter('foo_bar'),
$container->get('some_other_service')
);
}, [ 'tag' => [ 'param1' => 'foobar' ]);
}
/**
* Return the default parameters for the container.
*
* @return array
*/
public function getDefaultConfig()
{
return [
'foo_bar' => 'this is foo'
];
}
}