Automapper 引用应该在多层应用程序中放在哪里
Where should Automapper references go in multi-tiered application
我有一个网络解决方案,它包括网络 UI、网络 api 层、服务对象和封装存储库(有时使用工作单元模式)和 Entity Framework 实体。我的 Web 服务正在返回 JSON,我在 UI 控制器中反序列化,如下所示:
var response = await httpClient.GetAsync(endpoint);
var result = JsonConvert.DeserializeObject<anyTypeHere>(await response.EnsureSuccessStatusCode().Content.ReadAsStringAsync());
我的网络 api 层调用各种“服务”(全部表示为它们自己的图书馆项目 - 即:Accounting Service、EnrollmentService、CalendarService)。每个服务对象中都有通过存储库访问数据实体的代码:
// returns entity object
var customer = UnitOfWork.PatientRepository.GetCustomerById();
我想使用像 AutoMapper 这样的工具将实体对象映射到 dto/domain 对象,从而将 dto 对象返回给 UI 调用者。
我的问题是:
我应该在哪里添加Automapper参考和映射代码? (即:WebApi、服务项目、存储库层等...)
我是否应该创建一个包含 DTO 对象的单独库并在我的 UI 客户端以及 api 和服务层中引用它?
为您的 DTO 创建 class 库项目,例如 YourProject.Dtos,并将您的所有 dto 转移到该项目。然后在另一个项目(YourProject.Mapping)中创建接口:
public interface IMapperProfile
{
}
使用此接口映射签名,如:
public class AddressMapping : Profile, IMapperProfile
{
public AddressMapping()
{
CreateMap<AddressDto, Address>(MemberList.None).ReverseMap();
}
}
AddressRepositories 方法必须是这样的:
public async Task<IEnumerable<AddressDto>> GetAllAsync( CancellationToken cancellationToken = default)
{
var result = await _entity.AsNoTracking().ToListSync();
return _mapper.Map<IEnumerable<AddressDto>>(result);
}
现在您可以在 api 或 ui 启动程序中注册 Automapper class :
services.AddAutoMapper(typeof(IMapperProfile));
我有一个网络解决方案,它包括网络 UI、网络 api 层、服务对象和封装存储库(有时使用工作单元模式)和 Entity Framework 实体。我的 Web 服务正在返回 JSON,我在 UI 控制器中反序列化,如下所示:
var response = await httpClient.GetAsync(endpoint);
var result = JsonConvert.DeserializeObject<anyTypeHere>(await response.EnsureSuccessStatusCode().Content.ReadAsStringAsync());
我的网络 api 层调用各种“服务”(全部表示为它们自己的图书馆项目 - 即:Accounting Service、EnrollmentService、CalendarService)。每个服务对象中都有通过存储库访问数据实体的代码:
// returns entity object
var customer = UnitOfWork.PatientRepository.GetCustomerById();
我想使用像 AutoMapper 这样的工具将实体对象映射到 dto/domain 对象,从而将 dto 对象返回给 UI 调用者。
我的问题是:
我应该在哪里添加Automapper参考和映射代码? (即:WebApi、服务项目、存储库层等...)
我是否应该创建一个包含 DTO 对象的单独库并在我的 UI 客户端以及 api 和服务层中引用它?
为您的 DTO 创建 class 库项目,例如 YourProject.Dtos,并将您的所有 dto 转移到该项目。然后在另一个项目(YourProject.Mapping)中创建接口:
public interface IMapperProfile
{
}
使用此接口映射签名,如:
public class AddressMapping : Profile, IMapperProfile
{
public AddressMapping()
{
CreateMap<AddressDto, Address>(MemberList.None).ReverseMap();
}
}
AddressRepositories 方法必须是这样的:
public async Task<IEnumerable<AddressDto>> GetAllAsync( CancellationToken cancellationToken = default)
{
var result = await _entity.AsNoTracking().ToListSync();
return _mapper.Map<IEnumerable<AddressDto>>(result);
}
现在您可以在 api 或 ui 启动程序中注册 Automapper class :
services.AddAutoMapper(typeof(IMapperProfile));