精致的工厂对象建设

时间:2017-01-12 14:39:45

标签: c# generics dapper

我有类似以下查询的内容

_connection.Query<SomeType>(SELECT Id, Type, Time FROM table)

事情是SomeType是通用类型

public class SomeType<T>
{
    public int Id { get; set; }
    public SomeTypeType Type { get; set; }
    public DateTime Time { get; set; }
    public T Object { get; set; }
}

现在我可以定义某种SomeType<object>或其他什么,为了使用正确的通用SomeType<T>,我需要重建对象。

我希望能够做的就是拥有一条实际可行的线

var x =  _connection.Query<SomeType<object>>("...") as SomeType<OtherType>

(显然这不是一个很好的例子,但在我的情况下它更有意义)

无论如何,这显然会返回null,并且实际上不会起作用。

我想也许可以通过定义一些其他的方法来构造类型,可能会挂钩dapper初始化类型并定义Factory或其他东西的方式。

对我如何实际做到这一点的任何建议?

1 个答案:

答案 0 :(得分:1)

我不知道Dapper中使用的类型的任何可配置工厂。

我快速浏览了github上的代码并没有什么明显的,但我没有进行详尽的搜索。

TypeHandlers,但它们似乎更多地用于映射值类型,即模型对象的属性,而不是修改modelobject本身。

所以我认为你必须以更手动的方式处理这个问题:

sudo gem sources -a http://gemcutter.org

构造函数中从'SomeType'到'SomeType'的手动映射可能会变得乏味,因此您可以使用AutoMapper之类的东西来处理该位。