我刚刚参与了asp.net核心1.1项目,并在projetc AutoMapper中使用。
在asp.net核心1.1中,我在启动文件中添加services.AddAutoMapper()
:
asp.net核心1.1中的StartUp文件:
public void ConfigureServices(IServiceCollection services)
{
//Some Code
services.AddMvc();
services.AddAutoMapper();
}
我很容易在Controller中使用AutoMapper。
控制器:
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项目,我在sturtap文件中收到了services.AddAutoMapper()
的错误。
错误CS0121以下方法或属性之间的调用不明确:&#39; ServiceCollectionExtensions.AddAutoMapper(IServiceCollection,params Assembly [])&#39;和&#39; ServiceCollectionExtensions.AddAutoMapper(IServiceCollection,params Type [])&#39;
出现此错误的原因是什么?
此外,asp.net core 2中的services.AddAutoMapper
有一些参数。我该怎么发送这个参数?
答案 0 :(得分:12)
如果您使用的是AspNet Core 2.2和AutoMapper.Extensions.Microsoft.DependencyInjection v6.1 您需要在启动文件中使用
services.AddAutoMapper(typeof(Startup));
答案 1 :(得分:9)
您可能更新了ASP.NET核心依赖项,但仍使用过时的AutoMapper.Extensions.Microsoft.DependencyInjection
程序包。
对于ASP.NET Core,您至少需要https://www.nuget.org/packages/AutoMapper.Extensions.Microsoft.DependencyInjection/3.0.1
中的版本3.0.1
其中引用了AutoMapper 6.1.1或更高版本。
AutoMapper(&gt; = 6.1.1)
Microsoft.Extensions.DependencyInjection.Abstractions(&gt; = 2.0.0)
Microsoft.Extensions.DependencyModel(&gt; = 2.0.0)
较早的软件包依赖于Microsoft.Extensions.DependencyInjection.Abstractions
1.1.0
,并且无法与ASP.NET Core一起使用,因为Microsoft.Extensions.DependencyInjection.Abstractions
1.1.0和2.0之间存在重大变化
答案 2 :(得分:5)
安装软件包:
Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection -Version 7.0.0
坚果:
https://www.nuget.org/packages/AutoMapper.Extensions.Microsoft.DependencyInjection/
在启动课程中:
services.AddAutoMapper(typeof(Startup));
答案 3 :(得分:3)
我通过创建一个继承AutoMapper.Profile
public class model_to_resource_profile : Profile
{
public model_to_resource_profile()
{
CreateMap<your_model_class, your_model_resource_class>();
}
}
并在Startup.cs
中添加以下行:
services.AddAutoMapper(typeof(model_to_resource_profile ));
答案 4 :(得分:2)
在AutoMapper.Extensions.Microsoft.DependencyInjection
nuget软件包的新版本(6.1)中,您应按以下方式使用它:
services.AddAutoMapper(Type assemblyTypeToSearch);
// OR
services.AddAutoMapper(params Type[] assemblyTypesToSearch);
答案 5 :(得分:2)
这些都不适合我,我有一个.NET Core 2.2项目,用于配置映射器的完整代码如下( ConfigureService()方法的一部分):
// Auto Mapper Configurations
var mappingConfig = new MapperConfiguration(mc =>
{
mc.AddProfile(new SimpleMappings());
});
IMapper mapper = mappingConfig.CreateMapper();
services.AddSingleton(mapper);
然后我将我的Mappings类放置在BL项目中:
public class SimpleMappings : Profile
{
public SimpleMappings()
{
CreateMap<DwUser, DwUserDto>();
CreateMap<DwOrganization, DwOrganizationDto>();
}
}
最后,映射器的用法如下:
public class DwUserService : IDwUserService
{
private readonly IDwUserRepository _dwUserRepository;
private readonly IMapper _mapper;
public DwUserService(IDwUserRepository dwUserRepository, IMapper mapper)
{
_dwUserRepository = dwUserRepository;
_mapper = mapper;
}
public async Task<DwUserDto> GetByUsernameAndOrgAsync(string username, string org)
{
var dwUser = await _dwUserRepository.GetByUsernameAndOrgAsync(username, org).ConfigureAwait(false);
var dwUserDto = _mapper.Map<DwUserDto>(dwUser);
return dwUserDto;
}
}
以下是关于同一主题的类似链接: How to setup Automapper in ASP.NET Core
答案 6 :(得分:1)
官方文档: https://automapper.readthedocs.io/en/latest/Dependency-injection.html#asp-net-core
您可以使用配置文件定义配置。然后你让 AutoMapper知道这些配置文件在哪些程序集中定义 在处调用IServiceCollection扩展方法AddAutoMapper 启动:
services.AddAutoMapper(profileAssembly1, profileAssembly2 /*, ...*/);
或标记类型:
services.AddAutoMapper(typeof(ProfileTypeFromAssembly1), typeof(ProfileTypeFromAssembly2) /*, ...*/);
答案 7 :(得分:1)
如果您使用的是AspNet Core 2.2,请尝试从以下位置更改代码:
services.AddAutoMapper();
收件人:
services.AddAutoMapper(typeof(Startup));
对我有用!
答案 8 :(得分:0)
尝试一下,可以在2.1及更高版本上使用,我没有使用过任何以前的版本,所以无法分辨。
services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
答案 9 :(得分:0)
2019年12月6日基于Shawn Wildermuth编写的使用ASP.NET Core构建API的多元视野课程的初步尝试。当我收到错误消息“ ...模棱两可的'ServiceCollectionExtensions.AddAutoMapper(IServiceCollection,params Assembly [])...“
我开始研究适当的语法以在Core 2.2中实现AddAutoMapper。我的NuGet参考版本是7.0.0,在本教程中,我在数据存储库目录中创建了Profile类,该类另外引用了我的模型nir weiner和dev-siberia的上述答案使我试图在Startup.ConfigureServices( )的名称:
services.AddAutoMapper(typeof(CampProfile));
概要文件类的内容只是数据类及其构造函数中的模型的(不是双关语意的)旧学校地图
this.CreateMap<Camp, CampModel>();
这解决了当前版本缺少文档的问题。
恭喜,
ChristianProgrammer