gpt4 book ai didi

c# - 启动时未加载 Automapper 配置文件?

转载 作者:太空狗 更新时间:2023-10-29 18:26:28 40 4
gpt4 key购买 nike

我正在使用:

  • AutoMapper 6.1.1
  • AutoMapper.Extensions.Microsoft.DependencyInjection3.0.1

似乎我的配置文件没有被加载,每次调用 mapper.map 时我都会得到 AutoMapper.AutoMapperMappingException: 'Missing type map configuration or unsupported mapping.'

这是我的 Startup.cs 类 ConfigureServices 方法

 // This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();

//register automapper

services.AddAutoMapper();
.
.
}

在另一个名为 xxxMappings 的项目中,我有自己的映射配置文件。示例类

public class StatusMappingProfile : Profile
{
public StatusMappingProfile()
{
CreateMap<Status, StatusDTO>()
.ForMember(t => t.Id, s => s.MapFrom(d => d.Id))
.ForMember(t => t.Title, s => s.MapFrom(d => d.Name))
.ForMember(t => t.Color, s => s.MapFrom(d => d.Color));

}

public override string ProfileName
{
get { return this.GetType().Name; }
}
}

并在服务类中以这种方式调用 map

    public StatusDTO GetById(int statusId)
{
var status = statusRepository.GetById(statusId);
return mapper.Map<Status, StatusDTO>(status); //map exception here
}

status在调用statusRepository.GetById后有值

对于我的 Profile 类,如果我从 MapperConfigurationExpression 继承而不是从 Profile 继承,我得到了一个单元测试,如下所示,表明映射是好的。

    [Fact]
public void TestStatusMapping()
{
var mappingProfile = new StatusMappingProfile();

var config = new MapperConfiguration(mappingProfile);
var mapper = new AutoMapper.Mapper(config);

(mapper as IMapper).ConfigurationProvider.AssertConfigurationIsValid();
}

我的猜测是我的映射没有被初始化。我该如何检查?我错过了什么吗?我看到了 AddAutoMapper() 方法的重载

services.AddAutoMapper(params Assembly[] assemblies)

我是否应该传递我的 xxxMappings 项目中的所有程序集。我该怎么做?

最佳答案

我想通了。由于我的映射在不同的项目中,我做了两件事

  1. 从我的 API 项目(Startup.cs 所在的位置,添加了对我的 xxxMaprings 项目的引用)
  2. 在 ConfigureServices 中,我使用了获取程序集的重载 AddAutoMapper:

    public void ConfigureServices(IServiceCollection services)
    {
    services.AddMvc();

    //register automapper
    services.AddAutoMapper(Assembly.GetAssembly(typeof(StatusMappingProfile))); //If you have other mapping profiles defined, that profiles will be loaded too.

关于c# - 启动时未加载 Automapper 配置文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46310310/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com