Ir al contenido
learn

13. Inyección de dependencias y options

La inyección de dependencias de ASP.NET Core es un sistema de propiedad. Un lifetime dice cuánto tiempo pueden compartirse una instancia y su estado.

  • singleton: una instancia raíz, thread-safe y sin estado scoped capturado;
  • scoped: una instancia por scope, normalmente una petición HTTP;
  • transient: una instancia por resolución, todavía propiedad del contenedor.
same scope returns same instance: True
singleton returns same instance: True
different scopes return different instances: True
captive scoped dependency rejected: True

Los keyed services seleccionan implementación mediante una clave de composición. No disperses esa clave como service locator en el dominio.

IOptions<T> es una vista singleton, IOptionsSnapshot<T> recalcula por scope e IOptionsMonitor<T> observa cambios. Reloadable no significa seguro: define qué ve una operación en vuelo.

El programa configura capacidad inválida y observa OptionsValidationException. ValidateOnStart lleva ese fallo al inicio de una aplicación hosted.

Ventana de terminal
dotnet run --project code/csharp-advanced/Advanced -c Release -- l13

La salida verificada es expected/l13.txt.

  1. Inyecta un repositorio scoped en un cache singleton y repara la propiedad.
  2. Configura dos formatters keyed y mueve la selección de clave a la composición.
  3. Recarga capacidad durante trabajo en vuelo y escribe el invariante.
Soluciones
  1. Haz el consumidor scoped, pasa datos inmutables al singleton o crea y desecha scopes explícitos en infraestructura.
  2. Resuelve el servicio keyed al componer e inyecta un contrato sin clave en dominio.
  3. Aplica el nuevo valor a nuevas colas o ejecuta una migración explícita con admisión detenida.