В проекте, над которым я работаю, мы сопоставляем автоматически сгенерированные DTO с бизнес-объектами. База данных имеет кхм необычное (но в основном согласованное) соглашение об именах, что означает, что можно преобразовать большинство имен свойств 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?