Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

273
Vistas
ciclo de vida de inyección de dependencia para clases IDisposable en .NET core

Quiero saber cuál es la mejor manera de desechar todo el objeto IDisposable después de realizar la solicitud.

  • AddTransient<T> : agrega un tipo que se vuelve a crear cada vez que se solicita.
  • AddScoped<T> : agrega un tipo que se mantiene para el alcance de la solicitud.
  • AddSingleton<T> : agrega un tipo cuando se solicita por primera vez y lo conserva.

Por lo tanto, singleton podría no ser una buena opción porque se desechará después de que la aplicación se cierre. pero el alcance y el transitorio son buenos candidatos. Tengo un repositorio en el que quiero crear una conexión con mi base de datos de esta manera:

 public class Dapperr : IDapper { private readonly IConfiguration _config; private string Connectionstring = "DefaultConnection"; public Dapperr(IConfiguration config) { _config = config; } public void Dispose() { } public T Get<T>(string sp, DynamicParameters parms, CommandType commandType = CommandType.Text) { using IDbConnection db = new SqlConnection(_config.GetConnectionString(Connectionstring)); return db.Query<T>(sp, parms, commandType: commandType).FirstOrDefault(); } public List<T> GetAll<T>(string sp, DynamicParameters parms, CommandType commandType = CommandType.StoredProcedure) { using IDbConnection db = new SqlConnection(_config.GetConnectionString(Connectionstring)); return db.Query<T>(sp, parms, commandType: commandType).ToList(); } }

Ahora, en mi puesta en marcha, voy a agregar una inyección de dependencia:

 services.AddScoped<IDapper, Dapperr>();

Quiero saber si puedo eliminar a todos aquellos que using scop debido a la adición de dependencia de alcance. por ejemplo asi:

 public class Dapperr : IDapper { private readonly IConfiguration _config; private string Connectionstring = "DefaultConnection"; private readonly IDbConnection db ; public Dapperr(IConfiguration config) { _config = config; db = new SqlConnection(_config.GetConnectionString(Connectionstring)); } public T Get<T>(string sp, DynamicParameters parms, CommandType commandType = CommandType.Text) { return db.Query<T>(sp, parms, commandType: commandType).FirstOrDefault(); } public List<T> GetAll<T>(string sp, DynamicParameters parms, CommandType commandType = CommandType.StoredProcedure) { return db.Query<T>(sp, parms, commandType: commandType).ToList(); } }

¿La conexión sql se elimina después de que finaliza la solicitud o todavía necesito usar using ?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Después de leer los comentarios obtuve eso, tengo que configurar la interfaz como IDisposable para eliminar la conexión, así que cambié mi código de esta manera:

 public interface IDapper : IDisposeable { ... }

luego, en mi repositorio, implementé el método de eliminación:

 public class Dapperr : IDapper { private readonly IConfiguration _config; private string Connectionstring = "DefaultConnection"; private readonly IDbConnection db; public Dapperr(IConfiguration config) { _config = config; db = new SqlConnection(_config.GetConnectionString(Connectionstring)); } public T Get<T>( string sp, DynamicParameters parms, CommandType commandType = CommandType.Text) { return db.Query<T>(sp, parms, commandType: commandType).FirstOrDefault(); } public List<T> GetAll<T>(string sp, DynamicParameters parms) => db.Query<T>(sp, parms, commandType: commandType).ToList(); public void Dispose() { db?.dispose(); } }

Después de la depuración, vi que se llama a este método Dispose y se elimina la conexión. No estoy seguro de que esta sea la mejor práctica, pero con estos cambios solo escribí la configuración de conexión una vez y todos mis bloques using se eliminaron. Creo que esto sería bueno para solicitudes ligeras.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda