Общее свойство сопоставления Automapper из ISource => IDest, а затем указание оставшихся отображений - PullRequest
0 голосов
/ 07 февраля 2019

Моя ситуация заключается в том, что я должен объединить имя связанного объекта со свойством name во многих различных моделях.Эти модели имеют реализации, которые требуют своих собственных конфигураций.

Что я пробовал:

ProjectFrom.cs

public interface IProjectFrom {
    int Id { get; set; }
}
public class ProjectFromConcreteA : IProjectFrom {
    public int Id { get; set; }
    public string SomeProp { get; set; }
}

ProjectTo.cs

public interface IProjectTo {
    string Name { get; set; }
}
public class ProjectToConcreteA : IProjectTo {
    public string Name { get; set; }
    public string SomeProp { get; set; }
}

Profile.cs

CreateMap<IProjectFrom, IProjectTo>()
            .ForMember(projection => projection.Name, expression => expression.ResolveUsing<ProjectionResolver>());
CreateMap<ProjectFromConcreteA, ProjectToConcreteA>()
    .ForMember(concreteTo => concreteTo.SomeProp, expression => expression.MapFrom(concreteFrom => concreteFrom.SomeProp));

ProjectionResolver.cs

public class ProjectionResolver : IValueResolver<IProjectFrom, IProjectTo, string>
{
    private readonly IDependency _dependency;
    public ProjectionResolver(IDependency dependency)
    {
        _dependency = dependency;
    }
    public string Resolve(IProjectFrom source, IProjectTo destination,
        string destMember, ResolutionContext context)
    {
        return _dependency.GetStringFor(source.Id);
    }
}

Однако, похоже, это не работает, так как мой Resolver никогда не используется.Я пропускаю шаг?

...