Как остановить ValueInjecter от отображения нулевых значений?
Я использую ValueInjecter для сопоставления двух одинаковых объектов. Проблема, с которой я сталкиваюсь, заключается в том, что ValueInjector копирует нулевые значения из моего источника поверх моей цели. Поэтому я теряю много данных до нулевых значений.
Вот пример моего объекта, который иногда заполняется только наполовину, что приводит к его нулевым значениям, переписывающим целевой объект.
public class MyObject()
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<OtherObject> OtherObjects { get; set; }
}
to.InjectFrom(from);
Ответы
Ответ 1
В этом случае вам нужно создать пользовательскую конвенцию. См. Пример №2:
http://valueinjecter.codeplex.com/wikipage?title=step%20by%20step%20explanation&referringTitle=Home
Итак, вам нужно переопределить метод Match:
protected override bool Match(ConventionInfo c){
//Use ConventionInfo parameter to access the source property value
//For instance, return true if the property value is not null.
}
Ответ 2
Для тех, кто использует ValueInjecter
v3 +, ConventionInjection
устарел. Используйте следующие для достижения тех же результатов:
public class NoNullsInjection : LoopInjection
{
protected override void SetValue(object source, object target, PropertyInfo sp, PropertyInfo tp)
{
if (sp.GetValue(source) == null) return;
base.SetValue(source, target, sp, tp);
}
}
Использование:
target.InjectFrom<NoNullsInjection>(source);
Ответ 3
Вы хотите что-то вроде этого.
public class NoNullsInjection : ConventionInjection
{
protected override bool Match(ConventionInfo c)
{
return c.SourceProp.Name == c.TargetProp.Name
&& c.SourceProp.Value != null;
}
}
Использование:
target.InjectFrom(new NoNullsInjection(), source);