【发布时间】:2022-07-06 23:23:44
【问题描述】:
我需要自定义 MyAutoMapper 配置文件将我的对象映射到 DTO 的方式。在我的一个 ApplicationServices 中,我使用 ObjectMapper 进行相对简单的映射。问题是 ABP 的 AutoMapper 并不是大家都知道的普通 AutoMapper。
下面是理想情况下的 sn-p;除了 opt.MapFrom(m => Localizer[m.Type.ToString()]) 和 _objectMapper.Map<Preparation, DtoPreparation>(preparation, _localizer) 不能那样工作。
public class MyAutoMapperProfile : Profile
{
public MyAutoMapperProfile()
{
CreateMap<Preparation, DtoPreparation>()
.ForMember(m => m.PreparatorType, opt => opt.MapFrom(m => m.Type))
.ForMember(m => m.PreparatorTypeString, opt => opt.MapFrom(m => Localizer[m.Type.ToString()]));
}
}
public class SlipsAppService : TaxesAppService
{
private readonly IObjectMapper<TaxesApplicationModule> _objectMapper;
private readonly ISlipsManager _slipsManager;
private readonly IStringLocalizer<TaxesResource> _localizer;
public SlipsAppService(ISlipsManager iSlipsManager, IObjectMapper<TaxesApplicationModule> objectMapper, IStringLocalizer<TaxesResource> localizer)
{
_objectMapper = objectMapper;
_slipsManager = iSlipsManager;
_localizer = localizer;
}
[Microsoft.AspNetCore.Mvc.HttpPost("/api/slips/get-or-create-preparation")]
public async Task<DtoPreparation> GetOrCreateCurrentPreparation(BaseGetterInput input)
{
var preparation = await _slipsManager.GetOrCreatePreparation(input.Id);
return _objectMapper.Map<Preparation, DtoPreparation>(preparation, _localizer);
}
}
我找不到将任何信息从我的 ApplicationService 传递到 AutoMapper 配置文件的方法,因为 IObjectMapper.Map<>() 没有用于其他选项或对象的参数,这与普通 AutoMapper 不同。
也许有一种方法可以在依赖注入中注册 Profile,但是由于我对框架的了解有限,我找不到线索...
目前,我的问题仅在于本地化,但实际上它可以应用于任何事情。由于我的 DTO 包含其他嵌套的 DTO,因此管理 AutoMapper 之外的额外内容不是一种选择,除非我更改应用程序的结构只是为了解决问题。
【问题讨论】:
-
如果 ABP 框架的抽象不支持您想要的功能,您可以将其转换为 AutoMapper 对象。
-
铸造不起作用,因为 IObjectMapper 不直接继承 AutoMapper 的 IMapper,但是我能够通过对
AutoMapper的引用替换我对Volo.Abp.ObjectMapping的引用,而无需更改我的个人资料。跨度>
标签: c# automapper abp