【问题标题】:AutoMapper with Dependency Injection Not Mapping Profiles?具有依赖注入的 AutoMapper 不映射配置文件?
【发布时间】:2020-04-02 22:56:29
【问题描述】:

所以这是我的第一个 Stack Overflow 问题,我希望我能很好地提供足够的详细信息以寻求帮助。我正在尝试将 AutoMappper 与 dotnet 3.1 与依赖注入一起使用,但它似乎并没有按照它所说的方式注册我的地图。

我收到的错误:

AutoMapper.AutoMapperMappingException: Missing type map configuration or unsupported mapping.

Mapping types:
User -> UserCustomerDto

在我的 Startup.cs 我有:services.AddAutoMapper(typeof(Startup));IServiceCollection 区域内

我创建了 User 模型和各种 DTO 模型。

这是我拥有的一个示例 Profile 模型:

    public class UserCustomerProfile : Profile
    {
        public UserCustomerProfile()
        {
            CreateMap<User, UserCustomerDto>();
            CreateMap<UserCustomerDto, User>();
        }
    }

我的 DTO 模型具有我的用户模型所具有的所有字段减去一些字段,这些字段是我不想在 UI 中显示的。

文档很难理解,因为有非依赖注入的示例以及在项目启动期间需要配置的 9.0 之前版本。

我也尝试在CreateMap() 上使用.ReverseMap(),但这也没有用。

我在我正在使用的服务中注入:

        private readonly IMapper _mapper;

        public UserService(IMapper mapper)
        {
            _mapper = mapper;
        }

错误被吐出的地方是该服务内部,代码如下:_mapper.Map&lt;UserCustomerDto&gt;(user)

我对 dotnet core 和 C# 还很陌生,因此我们将不胜感激任何帮助!谢谢你,我希望这些信息足以为我指明正确的方向。

更新: 将 Profile 模型移动到与我的 Startup 相同的项目时,一切正常。现在我只需要知道如何添加对包含我的 Profile 模型的其他项目的引用。或者我不能?将它保留在我的模型项目中,我的其余模型所在的位置会很好。

【问题讨论】:

    标签: c# entity-framework asp.net-core dependency-injection automapper


    【解决方案1】:

    我认为您尚未将自动映射器配置文件注册到服务容器中。

    dotnet core 的设置在这里

    https://docs.automapper.org/en/stable/Dependency-injection.html#asp-net-core

    为名为@9​​87654322@的dotnet核心添加额外的nuget包

    如果您的配置文件在同一个项目中,您可以在启动时添加此代码

    services.AddAutoMapper(Assembly.GetExecutingAssembly());
    

    如果您的自动映射器配置文件在另一个项目中

    // where UserCustomerProfile is any class in the other project
    services.AddAutoMapper(
        Assembly.GetAssembly(typeof(UserCustomerProfile)));
    

    它将搜索所有配置文件并将其注册到服务列表中。

    【讨论】:

    • 我的个人资料在另一个项目中,你认为这就是原因吗?我有我的 Api 项目,这是控制器和设置所在的地方。然后我有我的服务项目,我的控制器调用它来完成逻辑。你知道我会为服务项目添加什么吗? (编辑:我已经有那个特定的 nuget 包)
    • 需要注意的是,我的其他项目只是类库,而 Api 项目引用了所有其他类库项目。特定的 Profile 模型存在于我的“模型”项目中。我尝试了Assembly.GetExecutingAssembly(),但也没有用。
    • 更新:将 Profile 模型移动到与我的 Startup 相同的项目时,一切正常。现在我只需要知道如何添加对包含我的 Profile 模型的其他项目的引用。或者我不能?将它保留在我的模型项目中我的其余模型所在的位置会很好。
    • 我的模型在另一个项目中,这对我有用:services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
    • 您只能致电AddAutoMapper 一次,因此也许将答案更改为一个电话,以确保:)
    猜你喜欢
    • 2016-07-03
    • 2021-08-01
    • 2011-05-11
    • 1970-01-01
    • 2012-08-29
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多