尝试将AutoMapper添加到Asp.net Core 2?

71

我之前参与了一个asp.net core 1.1的项目,使用了AutoMapper。

在asp.net core 1.1中,我在启动文件中添加了services.AddAutoMapper()

asp.net core 1.1中的启动文件:

    public void ConfigureServices(IServiceCollection services)
    {
        //Some Code

        services.AddMvc();
        services.AddAutoMapper();
    }

我可以轻松地在Controller中使用AutoMapper。

Controller :

 public async Task<IActionResult> AddEditBook(AddEditBookViewModel model)
 {
    Book bookmodel = AutoMapper.Mapper.Map<AddEditBookViewModel, Book>(model);
    context.books.Add(bookmodel);
    context.SaveChanges();
 }

一切都很好。

但是我目前正在开发一个Asp.net Core 2项目,启动文件中的services.AddAutoMapper()出现错误。

Error CS0121 The call is ambiguous between the following methods or properties: 'ServiceCollectionExtensions.AddAutoMapper(IServiceCollection, params Assembly[])' and 'ServiceCollectionExtensions.AddAutoMapper(IServiceCollection, params Type[])'

这个错误的原因是什么?
此外,在asp.net core 2中,services.AddAutoMapper有一些参数。我应该向这个参数传送什么内容?


不要混合使用 .NET Core 的版本。您可能引用了一些 .NET Core 或 ASP.NET Core 1.1 组件的引用。您必须将它们全部更新到相同的版本(即 2.0 或 2.1-rc),否则您仍然在引用过时的 Automapper 版本。 - Tseng
12个回答

1

官方文档: https://automapper.readthedocs.io/en/latest/Dependency-injection.html#asp-net-core

您可以使用配置文件来定义配置。然后,在启动时通过调用IServiceCollection扩展方法AddAutoMapper告知Automapper在哪些程序集中定义了这些配置文件:

services.AddAutoMapper(profileAssembly1, profileAssembly2 /*, ...*/);

或者标记类型:
services.AddAutoMapper(typeof(ProfileTypeFromAssembly1), typeof(ProfileTypeFromAssembly2) /*, ...*/);

0

2019年12月6日,基于Shawn Wildermuth在Pluralsight课程“使用ASP.NET Core构建API”的初始尝试。当我遇到错误“...ambiguous 'ServiceCollectionExtensions.AddAutoMapper(IServiceCollection, params Assembly[])...”时,我开始研究在Core 2.2中实现AddAutoMapper的正确语法。我的NuGet引用版本为7.0.0。在教程让我在我的数据存储库目录中创建Profile类并附加引用我的模型nir weiner和dev-siberia的答案使我尝试通过名称在Startup.ConfigureServices()中引用Profile类:

services.AddAutoMapper(typeof(CampProfile));

Profile类的内容只是一个(不是故意的)旧式数据类和模型构造函数的映射

this.CreateMap<Camp, CampModel>();  

这解决了当前版本文档不足的问题。

敬礼,

基督徒程序员


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接