c# - 将特定接口实现映射到接口目标
问题描述
我的 AutoMapper 配置文件中有多个映射,用于相同的源和目标类型。目标类型是一个具有多个具体实现的接口。根据场景,我将映射到 IEmployeeDto 的适当具体实现。
// Model
public class Department
{
public List<Employee> Employees { get; set; }
}
public class DepartmentDto
{
public List<IEmployeeDto> Employees { get; set; }
}
public class EmployeeDto1 : IEmployeeDto
{
...
}
public class EmployeeDto2 : IEmployeeDto
{
...
}
// Mappings
profile.CreateMap<Employee, IEmployeeDto>()
.As<EmployeeDto1>();
profile.CreateMap<Employee, IEmployeeDto>()
.As<EmployeeDto2>();
我也在使用实体框架。在运行时,我使用投影来映射:
var department = context.Departments
.ProjectTo<DeparmentDto>(config)
.SingleOrDefaultAsync(d => d.Name == departmentName);
//In this specific use case, I'm expecting EmployeeDto2 instead of EmployeeDto1
var employees = department.Employees;
有没有办法暗示目标类型的具体实现应该映射到哪个?
解决方案
您通过指定已配置为使用特定类型的 AutoMapper 映射来“提示”它应该使用哪个具体实现。当你写
profile.CreateMap<Employee, IEmployeeDto>().As<EmployeeDto1>();
当一个对象应该映射到一个实例时,它将使用特定的EmployeeDto1
类。如果您想要不同的映射,只需更改 AutoMapper 配置中配置的映射或使用不同的 AutoMapper 配置本身(配置了不同的映射)。您可以拥有多个对象实例,每个实例都有自己的配置。该方法需要配置才能使用,因此您可以根据需要交换配置。Employee
IEmployeeDto
MapperConfiguration
ProjectTo()
推荐阅读
- flutter - 当我打印进行调试时,它显示类型-->“未来的实例”
' 在颤振中 - opencv - opencv python 到 kotlin 的转换
- ios - UIDatePicker 在渲染时颠簸日期/时间
- reactjs - 如何为 react 和 django web-application 进行测试
- symfony - FosElasticaBundle:在填充过程中出错时防止对文档进行反索引的最佳方法
- java - 无法在 netbeans 中清理和构建 Web 应用程序
- css - @media min-width 没有覆盖普通的 CSS?
- if-statement - If 语句:根据多个潜在的单元格输入将动态输出返回为“如果为真则为值”
- android - Flutter video_player 无法在 Vivo 设备上播放视频
- spring-boot - JPA - 原生 @Query 参数