找到自动映射器未映射的属性

时间:2018-08-26 14:57:44

标签: asp.net-core automapper

大家好,我发现了一件很奇怪的事情,我想问你一件事。 我在.dotnet核心Web Api项目中使用AutoMaper。在映射过程中,我得到了AutoMapperConfigurationException。

这是我当前正在使用的参考:

<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="5.0.1" />

我有一个Blog实体类:

public class BlogEntity 
{
   public string Title { get; set; }
   public int BlogEntityId { get; set; }
   public List<Post> Posts { get; set; }
}

还有我用来创建新的空白博客实体的DTO类:

public class BlogCreateDto
{
   public string Title { get; set; }
}

这是我的映射器个人资料:

  public class BlogMappingProfile  : Profile
    {
        public BlogMappingProfile()
        {
            CreateMap<BlogCreateDto,BlogEntity>();

        }
    }

这是我在Startup.cs中用于设置自动映射器的一行

  public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);


            services.AddAutoMapper();
....

以下是我收到的异常消息:

  

找到未映射的成员。查看下面的类型和成员。\ n添加   自定义映射表达式,忽略,添加自定义解析器或修改   源/目标类型\ n对于不匹配的构造函数,请添加一个无参数   ctor,添加可选参数或映射所有构造函数   参数\ n =============================================== ========== \ r \ nAutoMapper为您创建了此类型映射,但是无法使用以下方式映射您的类型   当前配置。

我尝试了很多事情,忽略了成员,构造函数,继承等,但没有一个没有用。我通过在Startup.cs中添加配置并手动添加我的自动映射器配置文件来解决此问题:

        services.AddAutoMapper(cfg => cfg.AddProfile(new BlogMappingProfile()));

它正在工作,但是我仍然对我错过了一些东西并且没有以正确的方式进行操作感到困惑。我做错了什么?或者也许我错过了某些配置?

2 个答案:

答案 0 :(得分:1)

您必须提供配置文件或配置文件所在的程序集。该扩展程序使用程序集扫描来查找要注册的给定类型。如果您的配置文件与启动类位于同一项目中,则可以执行以下操作

services.AddAutoMapper(typeof(Startup).Assembly);

例如,您还需要自动注册所有其他AutoMapper类型,例如IValueResolver<,,>ITypeConverter<,>

您可以找到该扩展名here的注册过程。

答案 1 :(得分:0)

就我而言,我忘记了将Profile文件添加到AutoMapperConfig类中

类似的东西

 public static void Configure(MapperConfigurationExpression config)
 {
   config.AddProfile<SettingsProfile>();
 }