В проекте, над которым я работаю, мы сопоставляем автоматически генерируемые DTO с бизнес-объектами. База данных имеет ahem необычное (но в значительной степени непротиворечивое) соглашение об именах, что означает, что можно преобразовать большинство имен свойств DTO в их эквивалентные имена свойств бизнес-объекта, тем самым сохраняя много строк кода.
Например, в DTO (и базе данных) у нас есть свойство с именем account_ID__created
, которое сопоставляется со свойством BO с именем CreatedAccountId
. Такое преобразование происходит в MemberNameTransformer.GetBoMemberName()
, поэтому оно не так просто, как немного другое соглашение с другим разделителем.
Исходя из того, что у меня есть в исходном коде AutoMapper, я предпочитаю следующее:
public class DtoBoMappingOptions : IMappingOptions
{
public INamingConvention SourceMemberNamingConvention
{
get { return new PascalCaseNamingConvention(); }
set { throw new NotImplementedException(); }
}
public INamingConvention DestinationMemberNamingConvention
{
get { return new PascalCaseNamingConvention(); }
set { throw new NotImplementedException(); }
}
public Func<string, string> SourceMemberNameTransformer
{
get { return s => s; }
set { throw new NotImplementedException(); }
}
public Func<string, string> DestinationMemberNameTransformer
{
get { return MemberNameTransformer.GetBoMemberName; }
set { throw new NotImplementedException(); }
}
}
Теперь, как мне указать Mapper использовать эти параметры при сопоставлении SomeDto с SomeBusinessClass? Я понимаю, что у меня может быть неправильный интерфейс в IMappingOptions. Реальное мясо того, чего я пытаюсь достичь, находится в MemeberNameTransformer.GetBoMemberName()
.
Дополнительный кредит: Как я могу указать Mapper использовать эти параметры при сопоставлении любого IDto с IBusinessObject?