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

1.服务架构模式
image

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类
image

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层中使用
image

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;
}
posted @ 2025-08-15 20:22  一切为了尚媛小姐  阅读(31)  评论(0)    收藏  举报