简体   繁体   中英

How to use Automapper with ASP.NET Core 2.2 API

This is the error I get:

System.InvalidOperationException: Unable to resolve service for type 'myBackEnd.Entities.Striper' while attempting to activate 'myBackEnd.Controllers.StripeController'. at Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, Boolean isDefaultParameterRequired)

I am working on using Automapper for the first time. I am also new to NET. I am using an HTTPPOST to get data from the front end in the format

    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;

I have stripe.cs and stripeDto.cs files:

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; }
}

This is the mapping profile file:

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

Finally this is the Controller:

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);


 }

I get this error in visual studio "Unable to resolve service for type 'myBackEnd.Entities.Striper'"

Here is the startup.cs code:

services.AddAutoMapper();

First, you must install Automapper dependency injection package:

Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection

Call services.AddAutoMapper() in ConfigureServices method in the Startup class.

More on this at: https://dotnetcoretutorials.com/2017/09/23/using-automapper-asp-net-core/

Your AutoMapper configuration in Startup class should be as follows:

public void ConfigureServices(IServiceCollection services)
{

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

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

    //........
}

I know it's too late

but it's because of your startup and AutoMapper configuration

services.AddAutoMapper(typeof(MappingProfile).Assembly);

best regards

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM