일반 저장소의 정적 멤버 / 클래스

asp.net-core c# dapper

문제

나는 닷넷 코어가 분산 트랜잭션을 지원하지 않기 때문에 더 일반적인 저장소 클래스를 가지고있다. 저장소에서 개별적으로 주입하는 대신에 이미 일반 메소드로 열린 커넥션 객체를 보내기로 결정했다.

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;
    }
} 

이 클래스를 정적 ​​클래스로 변경해야합니다. 아래는 새 저장소입니다.

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;
    }
} 

일반 저장소에 대한이 정적 방법이 맞습니까? ..Pls가 나에게 제안 해.

수락 된 답변

나의 이해는 확장 메소드가 클래스의 인스턴스에 작용한다는 것이다. Get () 메서드에서 해당 인스턴스는 연결 매개 변수입니다. 그러나 Get () 메서드에서 연결 인스턴스를 덮어 쓰는 것 같습니다. 이것은 바람직하지 않을 수 있습니다.

확장 메서드를 만들지는 않을 것입니다. 아마도 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;
}

희망이 도움이!



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.