Skip to main content

Módulo "Hola mundo"

Este tutorial construye el módulo más pequeño posible de Crono, paso a paso, para fijar el flujo completo: proyecto → manifiesto → clase de módulo → controlador → vista. Es la versión práctica de Primeros pasos con módulos.

1. Crear el proyecto

Crea una biblioteca de clases dentro de src/Crono.Modulos/, por ejemplo Crono.HolaMundo. En su .csproj usa el SDK de Razor y dirige la salida a la carpeta de módulos de la aplicación web, para que Crono lo descubra al arrancar.

2. Declarar el manifiesto modulo.json

En la raíz del proyecto:

{
"$schema": "../modulo.esquema.json",
"NombreSistema": "Crono.HolaMundo",
"NombreDescriptivo": "Hola mundo",
"Descripcion": "Módulo de ejemplo.",
"Version": "1.0.0",
"VersionMinimaApp": "0.1.0",
"Autor": "Crono",
"Grupo": "Admin",
"ClaveRaizRecurso": "Complementos.Ejemplos.HolaMundo"
}

3. La clase de módulo Modulo.cs

Deriva de ModuloBase. Si el módulo tendrá pantalla de configuración, implementa también IConfigurable:

internal class Modulo : ModuloBase, IConfigurable
{
public RutaInformacion ObtenerRutaConfiguracion()
=> new("Configurar", "HolaMundoAdmin", new { area = "Admin" });

public override async Task InstalarAsync(ModuloInstalacionContexto contexto)
{
await ImportarIdiomaRecursosAsync();
await base.InstalarAsync(contexto);
}

public override async Task DesinstalarAsync()
{
await EliminarIdiomaRecursosAsync();
await base.DesinstalarAsync();
}
}

4. Un controlador que devuelve una vista

Añade un controlador que herede del controlador base del área correspondiente (ver Controladores y ViewComponents) y proteja su acción con [Permiso] (ver Seguridad):

public class HolaMundoController : AdminControladorBase
{
[Permiso(HolaMundoPermisos.Leer)]
public IActionResult Saludo()
{
return View(model: "Hola mundo");
}
}

5. La vista

En Views/HolaMundo/Saludo.cshtml:

@model string
<h1>@Model</h1>

6. Registrar servicios (si hace falta)

Si el módulo necesita registrar servicios propios, añade un Iniciador : IniciadorBase (ver Iniciador):

internal class Iniciador : IniciadorBase
{
public override void ConfigurarContenedor(ContainerBuilder constructor, IAplicacionContexto appContexto)
{
constructor.RegisterType<HolaMundoServicio>()
.As<IHolaMundoServicio>()
.InstancePerLifetimeScope();
}
}

7. Textos e instalación

Añade Localizacion/recursos.es-pe.xml con el nombre y la descripción del módulo (ver Localización de módulos), compila e inicia la aplicación. El módulo aparecerá en el Administrador de módulos; instálalo desde ahí y navega a la acción del controlador.

tip

A partir de este esqueleto, los siguientes tutoriales añaden piezas reales: una entidad de dominio, elementos de menú, pestañas y un proveedor de widget.