2016-09-21 5 views
0

У меня есть два типа, и я хочу иметь возможность игнорировать сопоставление свойств экземпляра источника в экземпляр адресата в том случае, когда свойствам присваивается значение «по умолчанию», которое я указываю. Единственное место, где значение по умолчанию существует, как часть метаданных выше типа или в конструкторе:Как сказать automapper пропустить свойства сопоставления из типа источника, если они являются значениями по умолчанию?

[System.ComponentModel.DefaultValue("")] 
    public string Name { get; set; } 

Как идти об этом?

+0

I подумайте, что это анти-шаблон, потому что mappers должны быть глупыми, и, таким образом, вы можете противостоять соблазну слишком большого количества журнала внутри них. –

ответ

0

Вы можете использовать метод «ResolveUsing» для настройки значения с помощью Reflection. В качестве альтернативы вы можете поместить значения по умолчанию в свою конфигурацию сопоставления с помощью метода конфигурации «UseValue».

Например:

ForMember(x => x.Name, x => x.ResolveUsing(GetDefaultValueAttributeContent)); 

Или:

ForMember(x => x.Name, x => x.UseValue("Default Value")); 

Чтобы добавить условие, просто используя отображение условие, которое проверяет от значения по умолчанию типа:

.ForMember(destination => destination.Name, 
    option => 
    { 
     option.Condition(context => 
     { 
      var src = context.InstanceCache.First().Value as SourceType; 
      return src.Name == default(string); 
     }); 

     option.ResolveUsing(GetDefaultValueAttributeContent); 
    }); 
+0

Есть ли способ установить это для всех свойств вместо того, чтобы сопоставлять их друг с другом? – sqenixs

+0

Технически да ... Но вам снова придется использовать отражение, чтобы захватить тип исходного значения. Для этого нет элегантного решения, и это, вероятно, не стоило бы усилий. –

 Смежные вопросы

  • Нет связанных вопросов^_^