C # dapper map a la interfaz

c# dapper

Pregunta

¿Puedo usar C # dapper para hacer algo como esto?

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

Ahora no puedo hacerlo, debido a que no he impedido el constructor sin parámetros predeterminado.

¿Hay algún truco para honrar a los dioses de SOLID (especialmente los espíritus del Principio de sustitución de Liskov) o debería dejarlo como está y asignar mis datos no a IFoo sino a Foo?

Realmente me preocupa respetar estas cosas SÓLIDAS, pero todavía no sé dónde debería hacerlo, así que busco un consejo para esta situación concreta.

Respuesta aceptada

Necesita una implementación concreta de su clase para crear instancias. Internamente, tiene que hacer un crear un nuevo objeto. No puede crear una nueva instancia de una interfaz:

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

Aún puede enviar su resultado a una interfaz, pero necesita un tipo concreto para compilar desde la base de datos.

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

Respuesta popular

Una forma de organizar el repositorio es usar objetos de clase privados para consultar, pero exponer los resultados como interfaces públicas.

Modelo de Pulbic:

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

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

Implementación de consulta con clase privada:

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


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué