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.
Cómo se conectan
Sección titulada «Cómo se conectan»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.
Recorrido recomendado
Sección titulada «Recorrido recomendado»| Necesidad | Guía |
|---|---|
| Creación, arranque y cierre | Ciclo de vida |
| Integración del servidor y protocolos | ASGI y RSGI |
| Inyectar la aplicación y consultar sus servicios | IApplication y API |
| Configurar el archivo de arranque | Opciones de bootstrap |
| Definir y consultar configuración | Configuración de aplicación |
| Rutas físicas y caché por despliegue | Directorios y caché |
| Registrar clases e invocar callables con DI | Contenedor y registro e invocación |
| Elegir transient, singleton o scoped | Scopes y concurrencia |
| Organizar registros e inicialización | Proveedores |
| Exponer un servicio mediante fachada | Fachadas 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.
Un ejemplo de inyección
Sección titulada «Un ejemplo de inyección»Guarda este controlador en app/http/controllers/app_info_controller.py:
from orionis.foundation.contracts.application import IApplicationfrom 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 AppInfoControllerfrom 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.