代码之家  ›  专栏  ›  技术社区  ›  C Bauer

Automapper mapping来自ISource=>IDest的泛型属性,然后指定剩余的映射

  •  0
  • C Bauer  · 技术社区  · 6 年前

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

    但是这似乎不起作用,因为我的解析器从来没有使用过。我是不是漏了一步?

    0 回复  |  直到 6 年前