仓储+服务架构模式+泛型基类+关系对象映射
1.服务架构模式

2.导入的依赖包Json和AutoMapper【Common类库】
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="AutoMapper" Version="12.0.1" />
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" />
3.配置Model类

public class Role
{
public int Id { get; set; }
public string? Name { get; set; }
}
public class RoleVo
{
public string RoleName { get; set; }
}
public class User
{
public int Id { get; set; }
public string? Name { get; set; }
}
public class UserVo
{
public string UserName { get; set; }
}
4.配置仓储层泛型基类
public interface IBaseRepository<TEntity> where TEntity : class
{
Task<List<TEntity>> Query();
}
public class BaseRepository<TEntity> : IBaseRepository<TEntity> where TEntity : class, new()
{
public async Task<List<TEntity>> Query()
{
await Task.CompletedTask;
var data = "[{\"Name\":\"laozhang\"}]";
return JsonConvert.DeserializeObject<List<TEntity>>(data) ?? new List<TEntity>();
}
}
5.配置Service层泛型基类
public interface IBaseService<TEntity, TVo> where TEntity : class
{
Task<List<TVo>> Query();
}
public class BaseService<TEntity, TVo> : IBaseService<TEntity, TVo> where TEntity : class, new()
{
private readonly IMapper _mapper;
private readonly IBaseRepository<TEntity> _baseRepository;
public BaseService(IMapper mapper, IBaseRepository<TEntity> baseRepository)
{
_mapper = mapper;
_baseRepository = baseRepository;
}
public async Task<List<TVo>> Query()
{
List<TEntity> entities = await _baseRepository.Query();
List<TVo> llout = _mapper.Map<List<TVo>>(entities);
return llout;
}
}
6.配置CustomProfile类
public class CustomProfile : Profile
{
public CustomProfile()
{
CreateMap<Role, RoleVo>().ForMember(a => a.RoleName, o => o.MapFrom(d => d.Name));
CreateMap<RoleVo, Role>().ForMember(a => a.Name, o => o.MapFrom(d => d.RoleName));
}
}
7.配置AutoMapperConfig类
public class AutoMapperConfig
{
public static MapperConfiguration RegisterMappings()
{
return new MapperConfiguration(cfg =>
{
cfg.AddProfile<CustomProfile>();
});
}
}
8.在program层注册【对象关系映射】和【依赖注入】服务
// mapper自动映射
builder.Services.AddAutoMapper(typeof(AutoMapperConfig));
AutoMapperConfig.RegisterMappings();
// 依赖注入
builder.Services.AddScoped(typeof(IBaseRepository<>), typeof(BaseRepository<>));
builder.Services.AddScoped(typeof(IBaseService<,>), typeof(BaseService<,>));
9.在control层中使用

private readonly ILogger<WeatherForecastController> _logger;
private readonly IMapper _mapper;
private readonly IBaseService<Role, RoleVo> _baseService;
public WeatherForecastController(ILogger<WeatherForecastController> logger,
IMapper mapper,
IBaseService<Role, RoleVo> baseService)
{
_logger = logger;
_mapper = mapper;
_baseService = baseService;
}
[HttpGet(Name = "GetWeatherForecast")]
public async Task<object> Get()
{
var roleList = await _baseService.Query();
return roleList;
}

浙公网安备 33010602011771号