Я пытаюсь использовать 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, с ним, игнорируя тот факт, что CustomerID и OrderID являются различных типов (один является нулевым, а другой нет).
Так что я хотел бы сделать это:
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
Ahhh Я вижу, вы написали вещь :) Отличный инструмент! Я использовал automapper для моего последнего проекта, это заводило меня с ума, ValueInjector кажется намного проще и проще в использовании ... так замечательная работа :) – Rocklan
отличная работа man hats off –