首页 > 解决方案 > Automapper 从 ISource => IDest 映射通用属性,然后指定剩余的映射

问题描述

我的情况是我必须将相关对象的名称合并到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; }
}

配置文件.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));

投影解析器.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);
    }
}

但是,这似乎不起作用,因为我的解析器从未使用过。我错过了一步吗?

标签: c#interface.net-corepolymorphismautomapper

解决方案


推荐阅读