13. Inyección de dependencias y options
Secciones
Ajustes de lectura
Ninguna voz para este idioma en este navegador.
Más voces
Código y términos técnicos en inglés
Desactivado: la voz de la página lo lee todo, sin pausa entre dos voces.
Ninguna voz para este idioma en este navegador.
Más voces
Más voces: Microsoft Edge ofrece voces naturales en línea, y Windows (Configuración › Hora e idioma › Voz), macOS y Android instalan otras.
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.
Los lifetimes no son trucos de rendimiento
Sección titulada «Los lifetimes no son trucos de rendimiento»- 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: Truesingleton returns same instance: Truedifferent scopes return different instances: Truecaptive scoped dependency rejected: TrueLos keyed services seleccionan implementación mediante una clave de composición. No disperses esa clave como service locator en el dominio.
Options como contrato
Sección titulada «Options como contrato»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.
Ejecutar la prueba
Sección titulada «Ejecutar la prueba»dotnet run --project code/csharp-advanced/Advanced -c Release -- l13La salida verificada es expected/l13.txt.
Ejercicios
Sección titulada «Ejercicios»- Inyecta un repositorio scoped en un cache singleton y repara la propiedad.
- Configura dos formatters keyed y mueve la selección de clave a la composición.
- Recarga capacidad durante trabajo en vuelo y escribe el invariante.
Soluciones
- Haz el consumidor scoped, pasa datos inmutables al singleton o crea y desecha scopes explícitos en infraestructura.
- Resuelve el servicio keyed al componer e inyecta un contrato sin clave en dominio.
- Aplica el nuevo valor a nuevas colas o ejecuta una migración explícita con admisión detenida.