我试图仅映射来自我的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.'
答案 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));