C# dapper 映射到接口
C# dapper map to interface
我可以使用 C# dapper 来做这样的事情吗:
IFoo bar = _dbConnection.Query<IFoo>("My query there");
现在我不能这样做,因为没有实现默认的无参数构造函数。
是否有一些技巧来纪念 SOLID 之神(尤其是 Liskov 替换原则的精神),或者我应该保持原样并将我的数据映射到 Foo 而不是 IFoo?
我真的很担心尊重这些 SOLID 的东西,但仍然不知道我应该在哪里做,所以寻找针对这种具体情况的建议。
您需要 class 的具体实现来实例化。在内部,它必须创建一个新对象。您不能创建接口的新实例:
var foo = new IFoo(); // This won't build!
您仍然可以将 结果 转换为接口,但您需要从数据库构建具体类型。
IEnumerable<IFoo> foo = _dbConnection.Query<Foo>("My query there");
组织存储库的一种方法是使用私有 class 对象进行查询,但将结果公开为 public 接口。
公共模型:
namespace MyProject.Foo.Model
{
public interface IFoo
{
string Property1 { get; set; }
string Property2 { get; set; }
}
public interface IFooRepository
{
IEnumerbale<IFoo> GetFoos();
}
}
私有查询实现 class:
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;
}
}
}
我可以使用 C# dapper 来做这样的事情吗:
IFoo bar = _dbConnection.Query<IFoo>("My query there");
现在我不能这样做,因为没有实现默认的无参数构造函数。
是否有一些技巧来纪念 SOLID 之神(尤其是 Liskov 替换原则的精神),或者我应该保持原样并将我的数据映射到 Foo 而不是 IFoo?
我真的很担心尊重这些 SOLID 的东西,但仍然不知道我应该在哪里做,所以寻找针对这种具体情况的建议。
您需要 class 的具体实现来实例化。在内部,它必须创建一个新对象。您不能创建接口的新实例:
var foo = new IFoo(); // This won't build!
您仍然可以将 结果 转换为接口,但您需要从数据库构建具体类型。
IEnumerable<IFoo> foo = _dbConnection.Query<Foo>("My query there");
组织存储库的一种方法是使用私有 class 对象进行查询,但将结果公开为 public 接口。
公共模型:
namespace MyProject.Foo.Model
{
public interface IFoo
{
string Property1 { get; set; }
string Property2 { get; set; }
}
public interface IFooRepository
{
IEnumerbale<IFoo> GetFoos();
}
}
私有查询实现 class:
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;
}
}
}