Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los servicios se pueden registrar con una duración transitoria, con alcance o "singleton". Elija una duración adecuada para cada servicio registrado.
Transient
Se crea un servicio con una duración transitoria cada vez que se solicita desde el contenedor de servicios. Para registrar un servicio como transitorio, llame a AddTransient.
En las aplicaciones que procesan solicitudes, los servicios transitorios se eliminan al final de la solicitud. Esta duración incurre en asignaciones por solicitud, ya que los servicios se resuelven y construyen cada vez. Para obtener más información, consulte Guía de IDisposable para instancias transitorias y compartidas.
Con ámbito
En el caso de las aplicaciones web, una duración controlada indica que los servicios se crean una vez por cada solicitud de cliente (conexión). En las aplicaciones que procesan solicitudes, los servicios con ámbito se eliminan al final de la solicitud. Registre servicios con ámbito llamando a AddScoped.
Nota:
Cuando se usa Entity Framework Core, el método de extensión AddDbContext registra tipos de DbContext con una duración de ámbito de forma predeterminada.
Un servicio con un ámbito siempre debe utilizarse dentro de un alcance, ya sea un ámbito implícito (como el ámbito por solicitud de ASP.NET Core) o un ámbito explícito creado con IServiceScopeFactory.CreateScope().
No resuelva un servicio con ámbito directamente desde un singleton mediante la inserción de constructores o solicitándolo desde IServiceProvider en singleton. Si lo hace, el servicio con ámbito se comporta como un singleton, lo que puede provocar un estado incorrecto al procesar las solicitudes posteriores.
Es aceptable resolver un servicio con ámbito dentro de un singleton si se crea y utiliza un ámbito explícito con IServiceScopeFactory.
También está bien:
- Resolver un servicio singleton desde un servicio con ámbito o transitorio.
- Resolver un servicio con ámbito desde otro servicio con ámbito o transitorio.
De manera predeterminada, en el entorno de desarrollo, resolver un servicio desde otro servicio con una duración más larga genera una excepción. Para más información, vea Validación del ámbito.
Singleton
Los servicios de duración de singleton se crean de alguna de las formas siguientes:
- La primera vez que se solicitan.
- Mediante el desarrollador, al proporcionar una instancia de implementación directamente al contenedor. Este enfoque rara vez es necesario.
Cada solicitud siguiente de la implementación del servicio desde el contenedor de inserción de dependencias utiliza la misma instancia. Si la aplicación requiere un comportamiento de singleton, permita que el contenedor de servicios administre la duración del servicio. No implemente el modelo de diseño singleton y proporcione el código para desechar el singleton. Los servicios nunca deben desecharse mediante el código que haya resuelto el servicio del contenedor. Si un tipo o fábrica se registra como singleton, el contenedor elimina el singleton de manera automática.
Registre los servicios singleton con AddSingleton. Los servicios singleton deben ser seguros para los subprocesos y se suelen usar en servicios sin estado.
En las aplicaciones que procesan solicitudes, los servicios singleton se eliminan cuando ServiceProvider se elimina al cerrarse la aplicación. Dado que la memoria no se libera hasta que se cierra la aplicación, considere la posibilidad de usar la memoria con un servicio singleton.