Как заставить AutoMapper работать с пользовательским соглашением об именах?

В проекте I ' В процессе работы мы сопоставляем автоматически сгенерированные 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?

5
задан Josh Kodroff 5 October 2010 в 22:00
поделиться