映射"long"创建对象

Mapping "long" to create an object

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

创建地图(MemberList.None);

来源:-long 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.'

正如 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));