asp.net核心中可能存在依赖项注入问题?
我正在完成教程,无法修复程序中的问题。当我转到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列表的授权用户时遇到了此错误。基本上代码在这里,我认为错误可能在这一行: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
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也许可以看看这个:谢谢你,你提供的这个链接稍加调整就解决了这个问题。太棒了,很高兴能帮上忙。如果答案是最有用的,请别忘了把它标为正确的。