asp.net核心中可能存在依赖项注入问题?

asp.net核心中可能存在依赖项注入问题?,asp.net,authentication,asp.net-mvc-4,Asp.net,Authentication,Asp.net Mvc 4,我正在完成教程,无法修复程序中的问题。当我转到my route时,会出现如下内部服务器错误: 处理请求时发生未处理的异常。 InvalidOperationException:无法解析类型的服务 'Microsoft.AspNetCore.Identity.UserManager'1[AspNetCoreTodo.Models.ApplicationUser]' 试图激活时 'AspNetCoreTodo.Controllers.TodoController'。 Microsoft.Extens

我正在完成教程,无法修复程序中的问题。当我转到my route时,会出现如下内部服务器错误:

处理请求时发生未处理的异常。 InvalidOperationException:无法解析类型的服务 'Microsoft.AspNetCore.Identity.UserManager'1[AspNetCoreTodo.Models.ApplicationUser]' 试图激活时 'AspNetCoreTodo.Controllers.TodoController'。 Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetServiceIServiceProvider sp,类型类型,类型要求者,布尔isDefaultParameterRequired

InvalidOperationException:无法解析类型的服务 'Microsoft.AspNetCore.Identity.UserManager'1[AspNetCoreTodo.Models.ApplicationUser]' 试图激活时 'AspNetCoreTodo.Controllers.TodoController'

由此判断,我认为问题在于我的控制器,具体来说是我的索引方法。到目前为止,它仍然有效,但我在尝试查找todo列表的授权用户时遇到了此错误。基本上代码在这里,我认为错误可能在这一行:

var items = await _todoItemService.GetIncompleteItemsAsync(currentUser);
以下是我的控制器代码:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks; 
using Microsoft.AspNetCore.Mvc;
using AspNetCoreTodo.Services;
using AspNetCoreTodo.Models;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;

namespace AspNetCoreTodo.Controllers 
{
    [Authorize]
    public class TodoController : Controller
    {
    private readonly ITodoItemService _todoItemService;
    private readonly UserManager<ApplicationUser> _userManager;
    public TodoController(ITodoItemService todoItemService, UserManager<ApplicationUser> userManager)
    {
        _todoItemService = todoItemService;
        _userManager = userManager;
    }
    public async Task<IActionResult> Index()
    {
        var currentUser = await _userManager.GetUserAsync(User);
        //var   currentUser = await _userManagerFindByIdAsync
        if(currentUser == null)
        {
            return Challenge();
        }
        var items = await _todoItemService.GetIncompleteItemsAsync(currentUser);

        var model = new TodoViewModel()
        {
            Items = items
        };

        return View(model);

    }
Startup.cs//配置

 public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlite(
                Configuration.GetConnectionString("DefaultConnection")));
        services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
            .AddEntityFrameworkStores<ApplicationDbContext>();
        services.AddControllersWithViews();
       services.AddRazorPages();
        services.AddMvc();
        services.AddAuthentication();
       services.AddScoped<ITodoItemService, TodoItemService>();
    }
我解决了这个问题,但将把它留给任何可能遇到类似问题的人。我要做的是在startup.cs文件中将IdentityUser替换为ApplicationUser,并在_LoginPartial.cshtml中更改这两行:

@注入SignInManager标识用户SignInManager

@注入用户管理器标识用户管理器

与:

@注入SignInManager应用程序用户SignInManager

@注入用户管理器应用程序用户管理器

在此之后,您应该在IdentityDBContext之后添加类型,以便在ApplicationDbContext.cs中有类似的内容,但前提是您收到上下文错误:

namespace AspNetCoreTodo.Data
{
    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }
    public DbSet<TodoItem> Items {get;  set;}
}
}这一行:

services.AddDefaultIdentityoptions=>options.SignIn.RequiredConfirmedAccount=true
我认为应该使用ApplicationUser而不是IdentityUser作为AddDefaultIdentity的通用参数。

听起来您还没有告诉.Net如何解析UserManager实例。您可以分享您的依赖项注入配置吗?我在startup.cs中添加了可能导致此问题的部分代码。当更改为ApplicationUser时,我在加载页面时遇到不同的错误。我在这里得到的错误如下:InvalidOperationException:没有注册类型为“Microsoft.AspNetCore.Identity.UserManager`1[Microsoft.AspNetCore.Identity.Identity.IdentityUser]”的服务。Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredServiceIServiceProvider,键入ServiceType也许可以看看这个:谢谢你,你提供的这个链接稍加调整就解决了这个问题。太棒了,很高兴能帮上忙。如果答案是最有用的,请别忘了把它标为正确的。