You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无源Automapper Resolver技术问询:为基页模型添加分类导航链接

使用AutoMapper Resolver为基页模型添加分类导航链接

看起来你正在用AutoMapper的自定义Resolver来动态给基页模型注入分类导航数据,我来帮你梳理这个实现的核心要点以及补全代码细节:

首先是完整的Resolver实现代码:

public sealed class CategoryNavigationResolver : IMemberValueResolver<object, object, string, ICollection<ProductCategoryModel>>
{
    public ICollection<ProductCategoryModel> Resolve(object source, object destination, string sourceMember, ICollection<ProductCategoryModel> destMember, ResolutionContext context)
    {
        // 获取分类处理服务实例
        IProductCategoryHandler productCategoryHandler = DependencyResolver.Current.GetService<IProductCategoryHandler>();
        
        // 调用服务获取分类数据,可根据sourceMember传递的参数做针对性过滤
        var categoryData = productCategoryHandler.GetNavigationCategories(sourceMember);
        
        // 转换为目标模型集合并返回,AutoMapper会自动赋值给页模型的对应属性
        return categoryData?.Select(c => new ProductCategoryModel
        {
            Id = c.Id,
            Name = c.Name,
            Url = c.Url
            // 可根据你的ProductCategoryModel补充其他属性映射逻辑
        }).ToList() ?? new List<ProductCategoryModel>();
    }
}

接下来是几个关键细节说明:

  • 泛型参数含义:IMemberValueResolver<object, object, string, ICollection<ProductCategoryModel>>的四个泛型分别对应:源对象类型、目标页模型类型、传递给Resolver的源成员参数类型(这里用string可传递分类标识等上下文参数)、目标页模型中分类导航属性的类型
  • 服务获取优化:通过DependencyResolver.Current获取服务是传统ASP.NET的方式,如果是ASP.NET Core项目,更推荐给Resolver的构造函数注入依赖,更符合依赖注入的最佳实践
  • 映射配置关联:需要在AutoMapper配置中把这个Resolver和基页模型的分类导航属性绑定,示例如下:
CreateMap<YourSourceEntity, BasePageModel>()
    .ForMember(dest => dest.CategoryNavigation, 
        opt => opt.MapFrom<CategoryNavigationResolver>(src => src.CategoryFilterParam));

这样每次AutoMapper从源对象映射到基页模型时,都会自动调用这个Resolver填充分类导航数据,避免了在每个页面逻辑里重复编写分类获取代码,实现了逻辑复用。

内容的提问来源于stack exchange,提问作者Pete

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:59:44