You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 09:19:56