AutoMapper Сглаживает метод расширения - PullRequest
2 голосов
/ 31 марта 2012

Я ищу самый простой / самый элегантный способ выравнивания исходного объекта, используя методы расширения исходного объекта.

Источник:

class Source
{
    public int Value1 { get; set; }
    public int Value2 { get; set; }
}

Метод расширения, который я хотел бы элегантно отобразить:

static class SourceExtensions
{
    public static int GetTotal(this Source source)
    {
        return source.Value1 + source.Value2;
    }
}

Назначение:

class Destination
{
    public int Value1 { get; set; }
    public int Value2 { get; set; }
    public int Total { get; set; }
}

Есть ли лучший способ, чем этот (тот, где мне не нужно вызывать каждый метод расширения)?

using NamespaceContainingMyExtensionMethods;
...
Mapper.CreateMap<Source, Destination>()
    .ForMember(destination => destination.Total,
        opt => opt.ResolveUsing(source => source.GetTotal()));

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

Mapper.CreateMap<Source, Destination>()
    .ResolveUsingExtensionsInNamespace("NamespaceContainingMyExtensionMethods");

Я знаю, что могу использовать наследственную иерархию на исходных объектах, но в моей ситуации это не идеально.

Я исследовал: Работают ли сопоставления, основанные на соглашениях AutoMapper, с методами расширения LINQ? и https://github.com/AutoMapper/AutoMapper/issues/34

Ответы [ 2 ]

2 голосов
/ 27 июня 2012

Добавлен коммит на мою форк и сделан запрос на это.Работает как шарм!

коммит: https://github.com/claycephus/AutoMapper/commit/e1aaf9421c63fb15daca02607d0fc3dff871fbd1

запрос на извлечение: https://github.com/AutoMapper/AutoMapper/pull/221

Настройте его, указав сборки для поиска:

Assembly[] extensionMethodSearch = new Assembly[] { Assembly.Load("Your.Assembly") };
Mapper.Initialize(config => config.SourceExtensionMethodSearch = extensionMethodSearch);
Mapper.CreateMap<Source, Destination>();
0 голосов
/ 16 ноября 2018

Глиняные штуки все еще там, но со временем они были переработаны.Для тех, кто ищет это в autopper, вы должны использовать:

var config = new MapperConfiguration(cfg => {
    cfg.IncludeSourceExtensionMethods(typeof(SourceExtensions));
    cfg.CreateMap<Source, Destination>();
});
var mapper = config.CreateMapper();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...