Skip to content

AggregateContainer

Felipe Sayão Lobato Abreu edited this page Jul 3, 2025 · 2 revisions

AggregateContainer

Aggregates multiple PSR-11 containers and delegates resolution requests among them.

This container implementation respects PSR-11 expectations and throws a NotFoundException when a requested service cannot be found in any delegated container.

It caches resolved entries to prevent redundant calls to delegated containers.

Constants

Constant Visibility Type Value
ALIAS public string 'container'

Properties

containers

private \FastForward\Container\ContainerInterface[] $containers

resolved

private array<string,mixed> $resolved

Methods

__construct

Constructs the AggregateContainer with one or more delegated containers.

public __construct(\Psr\Container\ContainerInterface $containers): mixed

The constructor SHALL bind itself to common aliases, including the class name and the PSR-11 interface, to simplify resolution of the container itself.

Parameters:

Parameter Type Description
$containers \Psr\Container\ContainerInterface One or more container implementations to aggregate.

append

Appends a container to the end of the aggregated list.

public append(\Psr\Container\ContainerInterface $container): void

This method MAY be used to dynamically expand the resolution pool.

Parameters:

Parameter Type Description
$container \Psr\Container\ContainerInterface the container to append

prepend

Prepends a container to the beginning of the aggregated list.

public prepend(\Psr\Container\ContainerInterface $container): void

This method MAY be used to prioritize a container during resolution.

Parameters:

Parameter Type Description
$container \Psr\Container\ContainerInterface the container to prepend

has

Determines whether a service identifier can be resolved.

public has(string $id): bool

This method SHALL return true if the identifier is pre-resolved or can be located in any of the aggregated containers.

Parameters:

Parameter Type Description
$id string the identifier of the entry to look for

Return Value:

true if the entry exists, false otherwise


get

Retrieves the entry associated with the given identifier.

public get(string $id): mixed

This method SHALL resolve from its internal cache first, and otherwise iterate through the aggregated containers to resolve the entry. It MUST throw a NotFoundException if the identifier cannot be resolved.

Parameters:

Parameter Type Description
$id string the identifier of the entry to retrieve

Return Value:

the resolved entry

Throws:

if the identifier cannot be found in any aggregated container

if the container cannot resolve the entry


isResolvedByContainer

Determines whether the identifier has already been resolved by this container.

private isResolvedByContainer(string $id): bool

This method is used internally to avoid unnecessary delegation to sub-containers.

Parameters:

Parameter Type Description
$id string the identifier to check

Return Value:

true if the identifier is already resolved, false otherwise



Automatically generated on 2025-07-03

Clone this wiki locally