Ir al contenido

Aplicación y contenedor

Application organiza el arranque y la ejecución de Orionis. Extiende Container: la aplicación también es el contenedor que registra y construye sus servicios. No necesitas crear un contenedor por separado para cada controlador o comando.

IApplication expresa ese contrato e incluye las operaciones de IContainer. La instancia se registra durante create() y puede recibirse mediante inyección. Los proveedores declaran servicios; el contenedor resuelve dependencias; los kernels HTTP y CLI coordinan cada solicitud o comando.

flowchart TD
    accTitle: Aplicación y contenedor de Orionis
    A[bootstrap/app.py] --> B[Application: configuración y registros]
    B --> C[Proveedores de servicios]
    C --> D[Contenedor y ciclos de vida]
    B --> E[Entrada HTTP o CLI]
    E --> F[Kernel y scope de ejecución]
    F --> D
    D --> G[Controlador, comando o servicio con dependencias]

El bootstrap prepara metadatos. Una caché válida puede restaurarlos desde disco; las instancias de servicios se construyen en la memoria de cada proceso. Un singleton del contenedor no es una instancia compartida entre workers o servidores.

NecesidadGuía
Creación, arranque y cierreCiclo de vida
Integración del servidor y protocolosASGI y RSGI
Inyectar la aplicación y consultar sus serviciosIApplication y API
Configurar el archivo de arranqueOpciones de bootstrap
Definir y consultar configuraciónConfiguración de aplicación
Rutas físicas y caché por despliegueDirectorios y caché
Registrar clases e invocar callables con DIContenedor y registro e invocación
Elegir transient, singleton o scopedScopes y concurrencia
Organizar registros e inicializaciónProveedores
Exponer un servicio mediante fachadaFachadas sync y async

Las variables .env se leen exclusivamente en archivos de configuración; su guía independiente es Entorno. Durante runtime usa los valores resueltos con app.config(). Las APIs de Database, Storage, HTTP o Queues se explican en sus secciones; aquí se documenta cómo la aplicación las integra.

Guarda este controlador en app/http/controllers/app_info_controller.py:

from orionis.foundation.contracts.application import IApplication
from orionis.http import JSONResponse
class AppInfoController:
def __init__(self, app: IApplication) -> None:
self.app = app
async def __call__(self) -> JSONResponse:
return JSONResponse({
"name": self.app.config("app.name"),
"created": self.app.isCreated,
})

En un archivo de rutas API:

from app.http.controllers.app_info_controller import AppInfoController
from orionis.support.facades import Route
Route.get("/app-info", AppInfoController)

La ruta entrega la clase al contenedor. No construyas otra Application dentro del manejador. La referencia de IApplication muestra también inyección por método y límites de configuración compartida.