Delegate Containers
Introduction
Delegate containers are a way to allow you to register one or multiple backup containers that will be used to attempt the resolution of services when they cannot be resolved via this container.
Usage
A delegate must be a PSR-11 implementation and can be registered using the delegate method.
<?php
namespace Acme\Container;
use Psr\Container\ContainerInterface;
class DelegateContainer implements ContainerInterface
{
// ..
}
<?php
$container = new League\Container\Container();
$delegate = new Acme\Container\DelegateContainer();
// this method can be invoked multiple times, each delegate
// is checked in the order that it was registered
$container->delegate($delegate);
Now that the delegate has been registered, if a service cannot be resolved via the primary container, it will resort to the has and get methods of the delegates to resolve the requested service.
Retrieving a Delegate
If you need to access a registered delegate later, use the getDelegate method with the delegate’s class name.
<?php
$container = new League\Container\Container();
$container->delegate(
new League\Container\ReflectionContainer()
);
$reflection = $container->getDelegate(League\Container\ReflectionContainer::class);
This is useful when you need to call delegate-specific methods that are not part of the PSR-11 interface, such as passing runtime arguments to ReflectionContainer::get() (see Auto Wiring).