C# 简洁的工厂对象构造
我有以下类似的查询C# 简洁的工厂对象构造,c#,generics,dapper,C#,Generics,Dapper,我有以下类似的查询 _connection.Query<SomeType>(SELECT Id, Type, Time FROM table) 现在我可以定义某种类型的SomeType或任何东西,为了使用正确的泛型SomeType,我需要重建对象 我想做的是有一条像这样的线,它能真正工作 var x = _connection.Query<SomeType<object>>("...") as SomeType<OtherType> var
_connection.Query<SomeType>(SELECT Id, Type, Time FROM table)
现在我可以定义某种类型的SomeType
或任何东西,为了使用正确的泛型SomeType
,我需要重建对象
我想做的是有一条像这样的线,它能真正工作
var x = _connection.Query<SomeType<object>>("...") as SomeType<OtherType>
var x=\u connection.Query(“…”)作为SomeType
(显然,这不是一个好例子,但在我看来,这更有意义)
无论如何,这显然会返回null,而且不会真正起作用
我想也许可以通过定义其他的方式来构造类型,也许可以连接到dapper初始化类型的方式并定义工厂或其他什么
有什么建议可以帮助我做到这一点吗?我不知道Dapper中使用的类型有任何可配置的工厂 我快速查看了github上的代码,没有发现任何明显的问题,但我没有进行彻底的搜索 有,但它们似乎更多地用于映射值类型、模型对象上的属性,而不是修改模型对象本身 因此,我认为您必须以更手动的方式处理此问题:
public class SomeType
{
public int Id { get; set; }
public SomeTypeType Type { get; set; }
public DateTime Time { get; set; }
public T Object { get; set; }
}
public class SomeType<T> : SomeType
{
public T Object { get; set; }
public SomeType() { }
public SomeType(SomeType someType, T obj)
{
this.Id = someType.Id;
...
this.Object = obj;
}
}
var someType = _connection.Query<SomeType>("SELECT Id, Type, Time FROM table");
var obj = new Foo();
var specialisedSomeType = new SomeType<Foo>(someType, obj);
公共类SomeType
{
公共int Id{get;set;}
公共SomeTypeType{get;set;}
公共日期时间{get;set;}
公共T对象{get;set;}
}
公共类SomeType:SomeType
{
公共T对象{get;set;}
公共SomeType(){}
公共SomeType(SomeType SomeType,T obj)
{
this.Id=someType.Id;
...
this.Object=obj;
}
}
var someType=_connection.Query(“从表中选择Id、类型、时间”);
var obj=新的Foo();
var SpecializedSomeType=新的SomeType(SomeType,obj);
构造函数中从“SomeType”到“SomeType”的手动映射可能会变得单调乏味,因此您可以使用类似的方法来处理该位。所以它是一种嵌套对象,您想通过查询填充它吗?
public class SomeType
{
public int Id { get; set; }
public SomeTypeType Type { get; set; }
public DateTime Time { get; set; }
public T Object { get; set; }
}
public class SomeType<T> : SomeType
{
public T Object { get; set; }
public SomeType() { }
public SomeType(SomeType someType, T obj)
{
this.Id = someType.Id;
...
this.Object = obj;
}
}
var someType = _connection.Query<SomeType>("SELECT Id, Type, Time FROM table");
var obj = new Foo();
var specialisedSomeType = new SomeType<Foo>(someType, obj);