Skip to main content

Hoja de referencia

Fragmentos rápidos de las tareas más frecuentes en Crono. Cada bloque enlaza a su sección para el detalle.

Registrar servicios (Iniciador)

internal class Iniciador : IniciadorBase
{
public override void ConfigurarServicios(IServiceCollection servicios, IAplicacionContexto app) { }

public override void ConfigurarContenedor(ContainerBuilder c, IAplicacionContexto app)
{
c.RegisterType<MiServicio>().As<IMiServicio>().InstancePerLifetimeScope();
}
}

Ver Iniciador.

Servicios comunes por constructor

public class MiServicio
{
private readonly IComunServicios _servicios;
public MiServicio(IComunServicios servicios) => _servicios = servicios;
// _servicios.DbContexto, .TrabajoContexto, .OrganizacionContexto, .Cache, .EventoPublicador, .Localizacion ...
}

Ver Buenas prácticas de DI.

Publicar y consumir eventos

await _eventoPublicador.PublicarAsync(new PrestamoAprobadoEvento(prestamoId));

public class MiConsumidor : IConsumidor
{
public async Task ManejarAsync(PrestamoAprobadoEvento e, CancellationToken ct) { /* ... */ }
}

Ver Eventos.

Entidad + migración

public class Notificacion : EntidadBase { public string Mensaje { get; set; } }

[MigracionVersion("2026-07-31 10:00:00", "NotificacionInicial")]
internal class NotificacionInicial : Migration
{
public override void Up()
{
if (!Schema.Table(nameof(Notificacion)).Exists())
Create.Table(nameof(Notificacion))
.WithIdColumn()
.WithColumn(nameof(Notificacion.Mensaje)).AsMaxString().Nullable();
}
public override void Down() { }
}

Ver Dominio y Migraciones.

Permisos

internal static class MiModuloPermisos
{
public const string _ = "mimodulo";
public const string Ver = "mimodulo.ver";
}

[Permiso(MiModuloPermisos.Ver)]
public IActionResult Index() => View();

Ver Seguridad.

Tarea programada

public class MiTarea : ITarea
{
public async Task Ejecutar(TareaEjecucionContexto ctx, CancellationToken ct)
{
await ctx.EstablecerProgresoAsync(50, 100, "Procesando...");
}
}

Ver Programación de tareas.

Atributos genéricos

entidad.AtributosGenericos.Establecer("MiClave", valor);
await entidad.AtributosGenericos.GuardarCambiosAsync();
var v = entidad.AtributosGenericos.Obtener<string>("MiClave");

Ver Atributos genéricos.

Endpoint de API

[WebApiGrupo(WebApiGrupoNombres.Prestamo)]
[ApiVersion("1")]
[Route("api/v{version:apiVersion}/mi-recurso")]
public class MiRecursoController : CronoApiController
{
[HttpGet, MapToApiVersion("1")]
[ProducesResponseType(typeof(MiDto), Status200OK)]
[Permiso(MiModuloPermisos.Ver)]
public Task<IActionResult> Obtener(CancellationToken ct) { /* ... */ }
}

Ver La Web API en detalle.

Tag helpers habituales

<barrapestanias id="x"><pestania cr-titulo="General" cr-seleccionado="true">...</pestania></barrapestanias>
<zona nombre="mi_zona"></zona>
<microaplicacion zona-destino="mi_zona">...</microaplicacion>
<div cr-si="Model.Visible">...</div>

Ver Tag Helpers.