jf / container
Contenedor de dependencias PSR-11
Requires
- jf/assert: ^3.1
- psr/container: ^2.0
Suggests
- jf/base: Para detectar las clases usadas como singleton
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:
Paquete | Versió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
Nombre | Descripción |
---|---|
jf\Container\Container | Contenedor para inyección de dependencias que implementa la interfaz Psr\Container\ContainerInterface . |
jf\Container\Exception\Container | Excepción genérica del contenedor. |
jf\Container\Exception\NotFound | Excepción lanzada cuando no se encuentra el identificador para obtener el valor del contenedor. |
jf\Container\Exception\Type | Excepción lanzada cuando se detecta algún valor incorrecto para el perámetro de un método. |
jf\Container\Parameters | Construye los valores de los parámetros de una función o método. |
jf\Container\Resolver\Reflection | Resuelve la instancia usando reflexión. |
jf\Container\Resolver\Singleton | Verifica si la clase es un singleton provisto por el paquete jf/base y lo devuelve. |
Interfaces
Nombre | Descripción |
---|---|
jf\Container\Resolver\IResolver | Interface para los resolutores de nombres. |