【问题标题】:Automapper different profiles for each project in .Net Core Solution为 .Net Core 解决方案中的每个项目自动映射不同的配置文件
【发布时间】:2019-06-17 07:10:55
【问题描述】:

我有一个具有以下结构的 .Net Core 2.1 解决方案

Infrastructure(此处添加了自动映射器)

Infrastructure(此处添加了自动映射器)

(只是为了清楚基础设施和 ApplicationCore 类库项目只存在一次)

ApplicationCore、MVC 和 Web API 项目都有特定于它们的类/DTO/视图模型。因此,在 MVC 和/或 API 项目的启动文件中使用单个配置文件可能会起作用,但会涉及一些重复。

为了测试,我想在没有 MVC 或 API 项目的情况下运行 ApplicationCore。

是否有一个很好的示例项目来展示如何为每个项目设置不同的配置文件?

【问题讨论】:

  • “Infrastructure (automapper added here)”,但是这个项目没有 DTO/View 引用,为什么要在这里添加 autumapper 配置文件?
  • 因此,您可以在任何地方拥有个人资料。只要您从 Profile 类派生,.NetCore 的 AutoMapper 包就会嗅探所有程序集并添加您的配置文件,以便它们可以通过 IMapper 注入获得
  • @LucianBargaoanu,我看过那个项目,但是(在我看来)自动映射器正在网络项目的启动文件中设置。我还想在 ApplicationCore 项目中对其进行配置,以便我可以独立于其他 Web 和 API 项目对其进行测试。我错过了什么吗?
  • @Jinish 听起来很棒,是否有一些关于它如何工作的文档?我一直使用 Mapper.Initialize 并传入配置文件。在类库项目(应用程序核心)中,我有一个配置文件,但无法锻炼如何让我的班级知道它在那里。

标签: c# .net-core automapper asp.net-core-2.1


【解决方案1】:

我也有同样的问题。这是我的解决方案,

  1. 我在继承“Profile”的应用程序核心库中创建了“MapperProfiles”

    public class MapperProfiles : Profile
    {
        public MapperProfiles()
        {
            CreateMap<YourModel, YourViewModel>();
            CreateMap<YourViewModel, YourModel>();
        }
    }
    
  2. 将 startup.cs 添加到下一行,

    services.AddAutoMapper(typeof(MapperProfiles));
    
  3. 现在控制器修改为,

    private readonly IMapper _mapper;
    
    public YourController(ApplicationDbContext context, IMapper mapper)
    {
        _context = context;
        _mapper = mapper;
    }
    
  4. 现在你可以在控制器中使用映射器了,

    YourModel model = _mapper.Map<YourModel >(YourViewModel);
    

【讨论】:

    猜你喜欢
    • 2020-05-12
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多