top*_*ool 41 asp.net-mvc automapper asp.net-core asp.net-core-2.0
我前一段时间从事asp.net core 1.1项目,并在projetc AutoMapper中使用。
在asp.net core 1.1中,我添加services.AddAutoMapper()了启动文件:
asp.net core 1.1中的启动文件:
public void ConfigureServices(IServiceCollection services)
{
//Some Code
services.AddMvc();
services.AddAutoMapper();
}
Run Code Online (Sandbox Code Playgroud)
而且我可以轻松地在Controller中使用AutoMapper。
控制器:
public async Task<IActionResult> AddEditBook(AddEditBookViewModel model)
{
Book bookmodel = AutoMapper.Mapper.Map<AddEditBookViewModel, Book>(model);
context.books.Add(bookmodel);
context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
一切都很好。但是我目前正在研究Asp.net Core 2项目,并且services.AddAutoMapper()在sturtap文件中遇到错误。
错误CS0121,以下方法或属性之间的调用不明确:'ServiceCollectionExtensions.AddAutoMapper(IServiceCollection,params Assembly [])'和'ServiceCollectionExtensions.AddAutoMapper(IServiceCollection,params Type [])'
此错误的原因是什么?另外,services.AddAutoMapper在asp.net中,核心2具有一些参数。我应该向该参数发送什么?
dev*_*ria 125
如果您使用的是AspNet Core 2.2和AutoMapper.Extensions.Microsoft.DependencyInjection v6.1,则需要在启动文件中使用
services.AddAutoMapper(typeof(Startup));
Run Code Online (Sandbox Code Playgroud)
Tse*_*eng 21
您可能更新了ASP.NET Core依赖项,但仍使用过时的AutoMapper.Extensions.Microsoft.DependencyInjection包。
对于ASP.NET核心,你需要至少版本3.0.1从 https://www.nuget.org/packages/AutoMapper.Extensions.Microsoft.DependencyInjection/3.0.1
其中引用了AutoMapper 6.1.1或更高版本。
AutoMapper(> = 6.1.1)
Microsoft.Extensions.DependencyInjection.Abstractions(> = 2.0.0)
Microsoft.Extensions.DependencyModel(> = 2.0.0)
较早的软件包取决于Microsoft.Extensions.DependencyInjection.Abstractions 1.1.0ASP.NET Core ,并且不能与ASP.NET Core一起使用,因为在Microsoft.Extensions.DependencyInjection.Abstractions1.1.0和2.0 之间发生了重大更改。
如果您使用的是 AspNet Core 2.2.请尝试更改您的代码
从:
services.AddAutoMapper();
Run Code Online (Sandbox Code Playgroud)
到:
services.AddAutoMapper(typeof(Startup));
Run Code Online (Sandbox Code Playgroud)
它对我有用。
安装包:
Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection -Version 7.0.0
Run Code Online (Sandbox Code Playgroud)
Nuget: https ://www.nuget.org/packages/AutoMapper.Extensions.Microsoft.DependencyInjection/
在创业班:
services.AddAutoMapper(typeof(Startup));
Run Code Online (Sandbox Code Playgroud)
在新版本(6.1)的AutoMapper.Extensions.Microsoft.DependencyInjectionnuget软件包中,您应按以下方式使用它:
services.AddAutoMapper(Type assemblyTypeToSearch);
// OR
services.AddAutoMapper(params Type[] assemblyTypesToSearch);
Run Code Online (Sandbox Code Playgroud)
这些都不适合我,我有一个.NET Core 2.2项目,用于配置映射器的完整代码如下所示(ConfigureService()方法的一部分):
// Auto Mapper Configurations
var mappingConfig = new MapperConfiguration(mc =>
{
mc.AddProfile(new SimpleMappings());
});
IMapper mapper = mappingConfig.CreateMapper();
services.AddSingleton(mapper);
Run Code Online (Sandbox Code Playgroud)
然后,将我的Mappings类放入BL项目中:
public class SimpleMappings : Profile
{
public SimpleMappings()
{
CreateMap<DwUser, DwUserDto>();
CreateMap<DwOrganization, DwOrganizationDto>();
}
}
Run Code Online (Sandbox Code Playgroud)
最后,映射器的用法如下所示:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
这是同一主题的相似链接: 如何在ASP.NET Core中设置Automapper
在.Net 6中,你可以这样做
builder.Services.AddAutoMapper(typeof(Program).Assembly); // Since there is no Startup file
Run Code Online (Sandbox Code Playgroud)
或者
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24838 次 |
| 最近记录: |