将特定接口实现映射到接口目标
Mapping specific interface implementation to interface destination
我的 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>();
我也在使用 Entity Framework。
在运行时,我使用投影来映射:
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;
有什么方法可以提示应该将目标类型映射到哪个具体实现?
您 "hint" 通过指定已配置为使用特定类型的 AutoMapper 映射,它应该使用哪个具体实现。当你写
profile.CreateMap<Employee, IEmployeeDto>().As<EmployeeDto1>();
当 Employee
对象应映射到 IEmployeeDto
实例时,它将使用特定的 EmployeeDto1
class。如果您想要不同的映射,只需更改 AutoMapper 配置中配置的映射或使用不同的 AutoMapper 配置本身(配置了不同的映射)。您可以有多个 MapperConfiguration
对象实例,每个实例都有自己的配置。 ProjectTo()
方法需要配置才能使用,所以你可以根据自己的需要调换配置。
我的 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>();
我也在使用 Entity Framework。 在运行时,我使用投影来映射:
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;
有什么方法可以提示应该将目标类型映射到哪个具体实现?
您 "hint" 通过指定已配置为使用特定类型的 AutoMapper 映射,它应该使用哪个具体实现。当你写
profile.CreateMap<Employee, IEmployeeDto>().As<EmployeeDto1>();
当 Employee
对象应映射到 IEmployeeDto
实例时,它将使用特定的 EmployeeDto1
class。如果您想要不同的映射,只需更改 AutoMapper 配置中配置的映射或使用不同的 AutoMapper 配置本身(配置了不同的映射)。您可以有多个 MapperConfiguration
对象实例,每个实例都有自己的配置。 ProjectTo()
方法需要配置才能使用,所以你可以根据自己的需要调换配置。