jf/container

Contenedor de dependencias PSR-11

1.0.0 2024-03-03 22:20 UTC

This package is auto-updated.

Last update: 2024-04-05 18:34:42 UTC


README

Contenedor de dependencias PSR-11.

Instalación

Composer

Este proyecto usa como gestor de dependencias Composer el cual puede ser instalado siguiendo las instrucciones especificadas en la documentación oficial del proyecto.

Para instalar el paquete jf/container usando este manejador de paquetes se debe ejecutar:

composer require jf/container

Dependencias

Cuando el proyecto es instalado, adicionalmente se instalan las siguientes dependencias:

PaqueteVersión
jf/assert^3.1
psr/container^2.0

Control de versiones

Este proyecto puede ser instalado usando git. Primero se debe clonar el proyecto y luego instalar las dependencias:

git clone https://www.gitlab.com/jfphp/jfContainer.git
cd jfContainer
composer install

Configuración

La configuración del contenedor es un mapa con el nombre de la intefaz como clave y como valor la clase que la implementa. También es posible especificar como clave un callable que se encargará de devolver la instancia requerida o devolver un resultado que se usa como discriminador para seleccionar una clase u otra.

function isLogged() : bool
{
    return true;
}

$container = Container::fromData([
    'classnames' => [
        IApp::class     => MyApp::class,     // <-- Se devuelve MyApp
        IDatbase::class => fn() => new Db(), // <-- Se ejecuta la función que devuelve Db.
        IUser::class    => [                 // <-- Interfaz a resolver
            'isLogged' => [                  // <-- Callable a ejecutar
                Guest::class: false,         // <-- `Guest` se devuelve si el resultado de `isLogged` es `false`.
                User::class:  true           // <-- `User` se devuelve si el resultado de `isLogged` es `true`.
            ],
            DefaulClass::class               // <-- Si isLogged no devolviera `false` o `true` se usaría esa clase.
        ]
    ]
]);
assert($container->get(IApp::class) instanceof MyApp);
assert($container[IDatabase::class] instanceof Db);   // Se puede usar notación de array
assert($container->get(IUser::class) instanceof User);

Archivos disponibles

Clases

NombreDescripción
jf\Container\ContainerContenedor para inyección de dependencias que implementa la interfaz Psr\Container\ContainerInterface.
jf\Container\Exception\ContainerExcepción genérica del contenedor.
jf\Container\Exception\NotFoundExcepción lanzada cuando no se encuentra el identificador para obtener el valor del contenedor.
jf\Container\Exception\TypeExcepción lanzada cuando se detecta algún valor incorrecto para el perámetro de un método.
jf\Container\ParametersConstruye los valores de los parámetros de una función o método.
jf\Container\Resolver\ReflectionResuelve la instancia usando reflexión.
jf\Container\Resolver\SingletonVerifica si la clase es un singleton provisto por el paquete jf/base y lo devuelve.

Interfaces

NombreDescripción
jf\Container\Resolver\IResolverInterface para los resolutores de nombres.