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

  1. Subes la DLL desde ADMINPANEL.
  2. El sistema la copia a ModulosCompilados.
  3. Valida que tenga ModuleDescriptor o ModuleInitializer.
  4. La marca como preparada para runtime.
  5. ADMINPANEL avisa que el reinicio es requerido para activacion completa.

Flujo cuando compilas desde ADMINPANEL

  1. El compilador genera la DLL del modulo.
  2. La DLL resultante se copia a ModulosCompilados.
  3. El modulo queda desplegado.
  4. El sistema no recompone al vuelo todo MVC y DI ya construidos.
  5. 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

  1. El loader descubre las DLL en ModulosCompilados.
  2. Lee ModuleDescriptor.
  3. Registra servicios y hooks via ModuleInitializer.
  4. Registra el DbContext del modulo si existe.
  5. ModuleMigrationManager intenta aplicar Database.Migrate().
  6. Si no hay migraciones, entra el modo compatibilidad.
  7. Despues se ejecutan seeds del modulo.
  8. 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.
  • DbContext si 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