인터페이스에 C #을 dapper지도

c# dapper

문제

다음과 같이 C # dapper를 사용할 수 있습니까?

IFoo bar = _dbConnection.Query<IFoo>("My query there");

이제는 매개 변수없는 기본 생성자가 구현되지 않아서 할 수 없습니다.

SOLID의 신 (특히 Liskov Substitution Principle의 영혼)을 존중하는 트릭이 있습니까? 아니면 그대로두고 IFoo가 아닌 Foo에게 내 데이터를 매핑해야합니까?

나는 이러한 단단한 것들을 존중하는 것에 대해 정말로 걱정하고 있지만, 아직도 내가 어떻게해야하는지 모른다. 그래서이 구체적인 상황에 대한 조언을 구한다.

수락 된 답변

인스턴스화 할 클래스의 구체적인 구현이 필요합니다. 내부적으로는 새로운 객체를 생성해야합니다. 인터페이스의 새 인스턴스를 만들 수 없습니다.

var foo = new IFoo(); // This won't build!

결과 를 인터페이스로 전송할 수 있지만 데이터베이스에서 빌드하려면 구체적인 유형이 필요합니다.

IEnumerable<IFoo> foo = _dbConnection.Query<Foo>("My query there");

인기 답변

저장소를 구성하는 한 가지 방법은 쿼리에 개인 클래스 개체를 사용하는 것이지만 결과를 공용 인터페이스로 표시하는 것입니다.

펄빅 모델 :

namespace MyProject.Foo.Model
{
    public interface IFoo
    {
        string Property1 { get; set; }
        string Property2 { get; set; }
    }

    public interface IFooRepository
    {
        IEnumerbale<IFoo> GetFoos();
    }
}

프라이빗 클래스를 사용한 쿼리 구현 :

namespace MyProject.Foo.Repositories
{
    public class FooRepository: IFooRepository
    {
        private class Foo: IFoo
        {
            public string Property1 { get; set; }
            public string Property2 { get; set; }
        }

        public IEnumerbale<IFoo> GetFoos()
        {
            IEnumerable<IFoo> foo = _dbConnection.Query<Foo>("My query there");
            return foo;
        }
    }
}


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow