«использование» конфигурации типа для свойств во встроенном типе - PullRequest
0 голосов
/ 28 ноября 2011

Рассмотрим эти 3 упрощенных примера типов, которые я пропускаю вверх и вниз (хотя на самом деле я выполняю только автоматические вычисления между DomainObject и WrapperClass):

public class DomainObject
{
   public int Prop1 {get;set;}
   public int Prop2 {get;set;}
   public int ComputedValue1 {get;set;}
   public int ComputedValue2 {get;set;}
}

public class DALEntity
{
   public int Prop1 {get;set;}
   public int Prop2 {get;set;}
}

public class Wrapper
{
   public DALEntity ToFromDB {get;set;}
   public int ComputedValue1 {get;set;}
   public int ComputedValue2 {get;set;}
}

DomainObject - это то, с чем имеет дело большая часть моего приложения, а DALEntity - это то, чтомой уровень доступа к данным имеет дело, когда CUDing вокруг с БД.Обратите внимание, что есть (в данном случае) 2 вычисляемых значения, которые не сохраняются - скорее они вычисляются внешне (для этого примера не имеет значения, как).Следовательно, я бы предпочел не включать их в свой DALEntity.

Для отображения вверх (src == DALEntity, dest == DomainObject) я хотел бы сказать Automapper, что для любого поля в DomainObject он не знает, как заполнять,msgstr "искать в этом сложном свойстве свойство, имя которого совпадает".Насколько я понимаю, прямо сейчас мне нужно явно указать все свойства вручную через MapFrom при создании отображения.Было бы реально сэкономить время (и меньше подвержено ошибкам), чтобы иметь возможность указать своего рода оператор использования для отображения.

Полагаю, вы могли бы назвать его "Проекция через подсказку": -)

Возможно ли это в настоящее время?

1 Ответ

0 голосов
/ 14 декабря 2011

Я бы переместил вычисление вычисленных свойств в свой собственный класс.Затем вы могли бы использовать внедрение зависимостей и заставить вычисляемые свойства вызывать внедренный класс для заполнения себя.AutoMapper не должен знать об этом.DO должен быть осведомлен о том, что он должен быть полностью работоспособным, или, за исключением этого, его фабрика должна.

Это также увеличило бы тестируемость класса.

В любом случае, если вы все еще хотите пойти по этому пути, вы можете передать функцию в метод отображения Automapper.

Что-то вроде:

 Mapper.CreateMap<DAL, DO>()
                .ForMember(m => m.CalcProp, 
                           opt => opt.MapFrom(src => 
                            { anon function that calls calculating code, passing src } ));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...