Не удалось разрешить службу для типа "Microsoft.AspNetCore.Identity.UserManager hile, пытающегося активировать" Controllers.AccountsController ". - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть следующий код в AccountsController:

using System.Threading.Tasks;
using AutoMapper;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Products.Helpers;
using Products.Models;
using Products.ViewModels;

namespace Products.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class AccountsController : Controller
    {
        private readonly ContextUsers _appDbContext;
        private readonly UserManager<AppUser> _userManager;
        private readonly IMapper _mapper;

    public AccountsController(ContextUsers context,UserManager<AppUser> userManager,IMapper mapper)
    {
        _appDbContext = context;
        _userManager = userManager;
        _mapper = mapper;
    }


    [HttpPost]
    public async Task<IActionResult> Post([FromBody]RegistrationViewModel model)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        var userIdentity = _mapper.Map<AppUser>(model);

        var result = await _userManager.CreateAsync(userIdentity, model.Password);

        if (!result.Succeeded) return new BadRequestObjectResult(Errors.AddErrorsToModelState(result, ModelState));

        await _appDbContext.Customers.AddAsync(new Customer { IdentityId = userIdentity.Id, Location = model.Location });
        await _appDbContext.SaveChangesAsync();
        return new OkObjectResult("Account created");
    }
}

}

И у меня есть следующий код в классе AppUser:

public class AppUser : IdentityUser
{
  // Extended Properties
  public string FirstName { get; set; }
  public string LastName { get; set; }
  public long? FacebookId { get; set; }
  public string PictureUrl { get; set; }
}

Иследующий класс клиента:

public class Customer
{
 public int Id { get; set; }
 public string IdentityId { get; set; }
 public AppUser Identity { get; set; }  // navigation property
 public string Location { get; set; }
 public string Locale { get; set; }
 public string Gender { get; set; }
}

Когда я делаю запрос на публикацию в почтальоне, я получаю следующую ошибку:

InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Identity.UserManager`1[Products.Models.AppUser]' while attempting to activate 'Products.Controllers.AccountsController'.
Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, bool isDefaultParameterRequired)

Я пытаюсь создать пользователя, но когда делаю запрос на публикациюдаже не входит в контроллер, поэтому я не могу отладить метод

ConfigureServices из файла startup.cs:

public void ConfigureServices(IServiceCollection services)
        {

                .AddCors(o => o.AddPolicy("AllowAllOrigins", builder =>
            {
                builder.AllowAnyMethod()
                    .AllowAnyHeader()
                    .AllowAnyOrigin();
            }));

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

            services.AddDbContext<Context>(options =>
                    options.UseSqlServer(Configuration.GetConnectionString("LaprDB")));
            services.AddDbContext<ContextUsers>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("MyDbConnection")));


            services.AddHostedService<TimedHostedService>();

             services.AddAutoMapper();


        }

1 Ответ

0 голосов
/ 20 декабря 2018

Вам не хватает строки для добавления объекта Identity в контейнер DI.Вам необходимо вызвать метод AddDefaultIdentity.Добавьте эту строку к методу ConfigureServices в вашем классе Startup:

services.AddDefaultIdentity<AppUser>()
    .AddEntityFrameworkStores<ContextUsers>();

См. здесь для получения дополнительной информации о настройке Identity.

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