gpt4 book ai didi

c# - ASP .NET 核心 3.0 依赖注入(inject)抛出 System.InsufficientExecutionStackException

转载 作者:行者123 更新时间:2023-12-01 23:48:04 27 4
gpt4 key购买 nike

我有一个关于 NET 核心依赖注入(inject)的奇怪问题。当我尝试注册服务时,抛出 InsufficientExecutionStackException 异常。这在这种情况下意味着什么?这就是我注册服务的方式(第三行抛出异常):

        var connectionStr = Configuration.GetValue<string>("databaseConnectionString");
services.AddSingleton<IDatabaseService>(s => new MySqlDatabaseService(connectionStr));
services.AddSingleton<IUserService>(s => new UserService(s.GetRequiredService<IUserRepository>(), secret, s.GetRequiredService<IAchievementService>()));//this line throws the exception
services.AddSingleton<IAchievementService, AchievementService>();
services.AddSingleton<IUserRepository, UserRepository>();
services.AddSingleton<IAchievementRepository, AchievementRepository>();
services.AddSingleton<IUserRequestService, UserRequestService>();
services.AddSingleton<AppSettingsService>();

UserService 类中注入(inject)了两个服务。这些是那些的构造函数:

    public UserService(IUserRepository userRepository, string secret, IAchievementService achievementService)
{
this.achievementService = achievementService;
this.userRepository = userRepository;
this.secret = secret;
}

用户资料库:

    public UserRepository(IDatabaseService databaseService)
{
this.databaseService = databaseService;
}

成就服务:

        public AchievementService(IAchievementRepository achievementRepository, IUserService userService)
{
this.achievementRepository = achievementRepository;
this.userService = userService;
this.userRequestService = userRequestService;
}

另一个奇怪的事情是,如果我从异常窗口(我使用的是 Visual Studio 2019)单击“查看详细信息”,调试器会崩溃并且不显示任何内容。

最佳答案

看起来您在 UserService 之间存在循环依赖和 AchievementService . dotnet 依赖注入(inject)不可能创建 UserService 的实例没有 AchievementService 的实例.但是要创建 AchievementService 的实例, 你需要一个 UserService 的实例.所以你陷入了无限循环。

您应该尝试通过删除依赖项来避免这种情况。这两种服务真的需要依赖另一个服务吗?

如果不行,可以尝试使用Lazy<Service>而不仅仅是 Service .

private readonly Lazy<IAchievementService> lazyAchievementService;

public UserService(Lazy<IAchievementService> lazyAchievementService, /*...*/)
{
this.lazyAchievementService = lazyAchievementService;
// ...
}

public void SomeFunction()
{
var achievementService = lazyAchievementService.Value;
achievementService.DoSomething();
}

这应该允许您创建这两个类。

关于c# - ASP .NET 核心 3.0 依赖注入(inject)抛出 System.InsufficientExecutionStackException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63872560/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com