Skip to content

Repository files navigation

PHPBench Service Container

Build Status

Simple, extensible dependency injection container with parameters and service tagging. Implements container interop.

Simple usage

$container = newContainer();
$container->register('foobar', function (Container$container) {
returnnew \stdClass();
});

Extending and Tagging

Extension classes should be passed as the first argument to the container (the user configuration is the second argumnet).

$container = newContainer(
[
MyExtension::class
],
[
'foo.bar' => 'my_new_value',
]
);
$container->init(); // will trigger loading of the extensions.
class MyExtension implements ExtensionInterface
{
publicfunctionload(Container$container)
{
$container->register('my_service', function (Container$container) {
$service = newMyService(
$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) {
returnnewMyService(
$container->getParameter('foo_bar'),
$container->get('some_other_service')
);
}, [ 'tag' => [ 'param1' => 'foobar' ]);
}
/** * Return the default parameters for the container. * * @return array */publicfunctiongetDefaultConfig()
{
return [
'foo_bar' => 'this is foo'
];
}
}

About

Simple, extensible and configurable dependency injection container.

Resources

Stars

15 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages