Miembro estático / clase para repositorio genérico

asp.net-core c# dapper

Pregunta

Tengo una clase de repositorio genérico dapper, ya que .net core no admite transacciones distribuidas. He decidido enviar un objeto de conexión ya abierto a un método genérico en lugar de inyectarlo por separado en el repositorio.

public class Repository<T> where T: class
{
    protected readonly IComplianceConnection Connection;

    public Repository(IComplianceConnection connection)
    {
        Connection = connection;
    }

    public IEnumerable<T> Get(string query, object arguments)
    {
        IList<T> entities;

        using (var connection = Connection.OpenConnection())
        {
            entities = connection.Query<T>(query, arguments, commandType: CommandType.StoredProcedure).ToList();
        }

        return entities;
    }
} 

Necesito cambiar esto a clase estática. Más abajo está el nuevo repositorio.

public static class Repository<T> where T: class
{

    public static IEnumerable<T> Get(this IDbConnection connection, string query, object arguments)
    {
        IList<T> entities;


            entities = connection.Query<T>(query, arguments, commandType: CommandType.StoredProcedure).ToList();


        return entities;
    }
} 

¿Es correcto este método estático para repositorio genérico? ..Pls sugiero

Respuesta aceptada

Mi entendimiento es que los métodos de extensión actúan en una instancia de una clase. En su método Get (), esa instancia es el parámetro de conexión. Sin embargo, parece que está sobrescribiendo la instancia de conexión en su método Get (). Esto puede no ser deseado.

Probablemente no desee crear un método de extensión. Quizás solo desee un método estático que pueda aceptar un parámetro IComplianceConnection.

public static IEnumerable<T> Get(IComplianceConnection complianceConnection, string query, object arguments)
{
    IList<T> entities;
    using (var connection = complianceConnection.OpenConnection())
    {
        entities = connection.Query<T>(query, arguments, commandType: CommandType.StoredProcedure).ToList();
    }
    return entities;
}

¡Espero que esto ayude!



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow