Runtime modular
Como funciona el sistema nuevo de ModulosCompilados
Esta pagina explica el flujo real cuando compilas o subes una DLL desde ADMINPANEL y como entra despues en el CRM.
Diagrama rapido
ADMINPANEL: compilar o subir DLL
↓
Copiar DLL a ModulosCompilados
↓
Validar ModuleDescriptor o ModuleInitializer
↓
Reiniciar aplicacion
↓
Loader descubre el modulo
↓
Registrar DI, MVC y DbContext
↓
Migrate() o modo compatibilidad
↓
Ejecutar seeds
↓
Modulo activo
Que es ModulosCompilados
ModulosCompilados es la carpeta runtime donde el sistema deja las DLL de modulos preparadas para el siguiente arranque completo del CRM.
- No es solo una carpeta temporal.
- Es el punto comun de despliegue para DLLs subidas o compiladas.
- El loader la revisa al arrancar la aplicacion.
Flujo cuando subes una DLL
- Subes la DLL desde ADMINPANEL.
- El sistema la copia a
ModulosCompilados. - Valida que tenga
ModuleDescriptoroModuleInitializer. - La marca como preparada para runtime.
- ADMINPANEL avisa que el reinicio es requerido para activacion completa.
Flujo cuando compilas desde ADMINPANEL
- El compilador genera la DLL del modulo.
- La DLL resultante se copia a
ModulosCompilados. - El modulo queda desplegado.
- El sistema no recompone al vuelo todo MVC y DI ya construidos.
- El reinicio sigue siendo necesario para la carga completa.
Que si pasa sin reiniciar
- La DLL queda guardada en la ruta correcta.
- Se puede validar su estructura basica.
- Queda preparada para el siguiente ciclo completo de arranque.
Que no pasa sin reiniciar
- No se recompone completamente el contenedor DI.
- No se registran de forma fiable nuevas rutas MVC dentro del pipeline ya construido.
- No se ejecuta el ciclo completo de migraciones y seeds como en un arranque normal.
- No debes asumir que el modulo ya esta operativo al 100%.
Regla practica: subida o compilacion de DLL = modulo desplegado. Reinicio = modulo activado completamente.
Que pasa al reiniciar la aplicacion
- El loader descubre las DLL en
ModulosCompilados. - Lee
ModuleDescriptor. - Registra servicios y hooks via
ModuleInitializer. - Registra el
DbContextdel modulo si existe. ModuleMigrationManagerintenta aplicarDatabase.Migrate().- Si no hay migraciones, entra el modo compatibilidad.
- Despues se ejecutan seeds del modulo.
- Las rutas, hooks, menus y servicios ya quedan activos para el runtime completo.
Que necesita traer una DLL de modulo
- Codigo compilado del modulo.
ModuleDescriptor.ModuleInitializer.DbContextsi el modulo usa tablas propias.- Migraciones compiladas si quieres esquema versionado correcto.
- Seeds si el modulo necesita bootstrap de permisos, menu o catalogos base.
Diferencia entre migraciones y compatibilidad
El sistema nuevo intenta primero la via buena:
Database.Migrate()
Si el modulo aun no tiene migraciones, entra en un modo compatible que intenta:
EnsureCreated() CreateTablesAsync() SchemaAlterService.SyncSchemaAsync(...)
Eso permite convivir con modulos antiguos mientras migras el sistema a EF Core bien hecho por modulo.
Modelo recomendado a futuro
- Desarrollo: crear migraciones por modulo.
- Despliegue: copiar DLL a
ModulosCompilados. - Produccion: reiniciar aplicacion para activacion completa.
- Arranque: aplicar migraciones, seeds y registrar todo el pipeline del modulo.
Resumen rapido
Compilar o subir DLL -> copiar a ModulosCompilados -> validar modulo -> reiniciar aplicacion -> loader descubre modulo -> DI + MVC + DbContext + migraciones + seeds -> modulo operativo