ASP.NET Core多项目中如何正确使用Identity UserManager?
问题解决:Infrastructure层使用UserManager的错误修复
错误原因
异常核心是单例服务无法依赖作用域服务:UserManager<AppUser>是ASP.NET Core Identity默认注册的作用域(Scoped)服务,而你将IUserService注册为单例(Singleton)。单例生命周期远长于作用域服务,会导致作用域服务被长期持有,引发资源泄漏或上下文失效问题。
修复步骤
1. 调整服务注册生命周期
在InfrastructureServiceRegistration类中,将AddSingleton替换为AddScoped,让IUserService与UserManager保持一致的作用域生命周期:
namespace JobSearch.Infrastructure; public static class InfrastructureServiceRegistration { public static IServiceCollection ConfigureInfrastructureServices(this IServiceCollection services) { // 替换单例注册为作用域注册 services.AddScoped<IUserService, IdentityUserService>(); return services; } }
2. 验证DbContext生命周期一致性
确保AppUser对应的DbContext是作用域注册(默认AddDbContext即为Scoped,无需额外修改),避免出现其他生命周期不匹配问题。
依赖注入生命周期规则说明
- 单例服务不能依赖作用域/瞬态服务
- 作用域服务可依赖单例或其他作用域服务
- 瞬态服务可依赖任意生命周期的服务
修改后,依赖注入容器即可正常解析UserManager,GetAllUsers方法也能正常调用_userManager.Users.ToList()获取用户列表。
内容的提问来源于stack exchange,提问作者samiayaz
相关产品推荐
相关产品推荐

