我試圖使用ValueInjector來壓扁一個類,並讓它也跨過從Nullable<int>'s
到int
之間的值。使用ValueInjecter扁平化包括可空類型的對象
例如給出下面的(人爲)類:
class CustomerObject
{
public int CustomerID { get; set; }
public string CustomerName { get; set; }
public OrderObject OrderOne { get; set; }
}
class OrderObject
{
public int OrderID { get; set; }
public string OrderName { get; set; }
}
class CustomerDTO
{
public int? CustomerID { get; set; }
public string CustomerName { get; set; }
public int? OrderOneOrderID { get; set; }
public string OrderOneOrderName { get; set; }
}
我想拉平CustomerObject的實例來 一個CustomerDTO,它忽略了一個事實,即在客戶 和訂單ID的是不同類型的(一個是不可空的)。
所以我想這樣做:
CustomerObject co = new CustomerObject() { CustomerID = 1, CustomerName = "John Smith" };
co.OrderOne = new OrderObject() { OrderID = 2, OrderName = "test order" };
CustomerDTO customer = new CustomerDTO();
customer.InjectFrom<>(co);
然後都填充屬性,具體是:
customer.CustomerID
customer.OrderOneOrderID
customer.OrderOneOrderName
我知道我可以使用FlatLoopValueInjection
拉平的對象,我正在使用這個NullableInjection類:
public class NullableInjection : ConventionInjection
{
protected override bool Match(ConventionInfo c)
{
return c.SourceProp.Name == c.TargetProp.Name &&
(c.SourceProp.Type == c.TargetProp.Type
|| c.SourceProp.Type == Nullable.GetUnderlyingType(c.TargetProp.Type)
|| (Nullable.GetUnderlyingType(c.SourceProp.Type) == c.TargetProp.Type
&& c.SourceProp.Value != null)
);
}
protected override object SetValue(ConventionInfo c)
{
return c.SourceProp.Value;
}
}
基本上我想t o將兩者結合起來。這可能嗎?
偉大工程CN!現在我唯一的問題是......你是怎麼解決這個問題的? – Rocklan 2012-04-19 23:08:29
啊我看,你寫的東西:)偉大的工具!我用automapper我的最後一個項目,它被我逼瘋,ValueInjector看來很多simplier和更容易使用......如此偉大的工作:) – Rocklan 2012-04-19 23:40:52
偉大的工作,男人戴的帽子 – 2013-10-15 12:11:31