Как использовать Automapper с API ASP.NET Core 2.2 - PullRequest
0 голосов
/ 10 февраля 2019

Это ошибка, которую я получаю:

System.InvalidOperationException: невозможно разрешить службу для типа «myBackEnd.Entities.Striper» при попытке активировать «myBackEnd.Controllers.StripeController».в Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService (IServiceProvider sp, Type type, Type requiredBy, Boolean isDefaultParameterRequired)

Я работаю над использованием Automapper впервые.Я также новичок в сети.Я использую HTTPPOST для получения данных из внешнего интерфейса в формате

    amount :  string;
    currency :  string;
    description :  string;
    token :  string;
    name: string;
    address_city: string;
    address_line1: string;
    address_line2: string;
    address_state: string;
    address_zip: string;
    address_country: string;

У меня есть файлы stripe.cs и stripeDto.cs:

public class Striper
{
    public object Amount { get; set; }
    public string Currency { get; set; }
    public object Description { get; set; }
    public string Token { get; set; }
    public string Name { get; set; }
    public string Address_line1 { get; set; }
    public string Address_line2 { get; set; }
    public string Address_state { get; set; }
    public string Address_zip { get; set; }
    public string Address_country { get; set; }
}

stripeDto:

public class StripeDto
{
    public object Amount { get; set; }
    public string Currency { get; set; }
    public object Description { get; set; }
    public string Token { get; set; }
    public string Name { get; set; }
    public string Address_line1 { get; set; }
    public string Address_line2 { get; set; }
    public string Address_state { get; set; }
    public string Address_zip { get; set; }
    public string Address_country { get; set; }
}

Это файл профиля сопоставления:

public class MappingProfile : Profile
{
    public MappingProfile()
    {
        CreateMap<Striper, StripeDto>();
        CreateMap<StripeDto, Striper>();
    }
}

Наконец, это контроллер:

private readonly AppDbContext _context;
private IMapper _mapper;

public StripeController(AppDbContext context, IMapper mapper)
{
     _context = context;
     _mapper = mapper;
}

public async Task<IActionResult> PostCreditCardData([FromBody] StripeDto stripeDto)
{
        Console.WriteLine("got this from the front end", stripeDto);
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

          _context.StripeDto.Add(stripeDto);
         // Instantiate source object stripe
         await _context.SaveChangesAsync();

        _striper = _mapper.Map<Striper>(stripeDto);
        return Ok(_striper);


 }

Я получаю эту ошибку в Visual Studio "Невозможно разрешить службу для типа'myBackEnd.Entities.Striper' "

Вот код запуска .cs:

services.AddAutoMapper();

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Ваша AutoMapper конфигурация в классе Startup должна быть следующей:

public void ConfigureServices(IServiceCollection services)
{

    // Auto Mapper Configurations
    var mappingConfig = new MapperConfiguration(mc =>
    {
        mc.AddProfile(new MappingProfile());
    });

    IMapper mapper = mappingConfig.CreateMapper();
    services.AddSingleton(mapper);

    //........
}
0 голосов
/ 10 февраля 2019

Сначала необходимо установить пакет внедрения зависимостей Automapper:

Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection

Вызвать services.AddAutoMapper () в методе ConfigureServices в классе Startup.

Подробнее об этом: https://dotnetcoretutorials.com/2017/09/23/using-automapper-asp-net-core/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...