映射“ long”以创建对象

时间:2019-06-13 15:29:40

标签: automapper automapper-6

我试图仅映射来自我的url路由的长字段以从控制器创建查询对象,我可以使用自动映射器

CreateMap(MemberList.None);

来源:-长ID

目的地:-

public class GetPlanQuery : IRequest<PlanDto>
    {
        public long Id { get; }
        public GetPlanQuery(long id)
        {
            Id = id;
        }

        internal sealed class GetPlanQueryHandler : IRequestHandler<GetPlanQuery, PlanDto>
        {
           //Logic will go here
        }
    }

我正在使用的地图如下

CreateMap<long, GetPlanQuery>(MemberList.None);

我以

执行时遇到异常
System.ArgumentException:
needs to have a constructor with 0 args or only optional args.'

1 个答案:

答案 0 :(得分:1)

正如Lucian正确建议的那样,您可以通过实现ITypeConverter来实现这种自定义映射:

public class LongToGetPlanQueryTypeConverter : ITypeConverter<long, GetPlanQuery>
{
    public GetPlanQuery Convert(long source, GetPlanQuery destination, ResolutionContext context)
    {
        return new GetPlanQuery(source);
    }
}

然后在AutoMapper配置中指定其用法:

configuration.CreateMap<long, GetPlanQuery>()
    .ConvertUsing<LongToGetPlanQueryTypeConverter>();

编辑

或者,您可以只使用Func

configuration.CreateMap<long, GetPlanQuery>()
    .ConvertUsing(id => new GetPlanQuery(id));