.NET 8控制台应用DI报错:无法解析ILoggerFactory服务
修复方法
问题根源
本地化模块默认使用的ResourceManagerStringLocalizerFactory,其构造函数要求注入ILoggerFactory,但你的DI容器中没有注册该服务,导致无法创建这个工厂类,进而引发依赖解析失败。
具体修复步骤
1. 注册空日志工厂
添加一个不输出任何日志的ILoggerFactory实现,满足本地化的依赖需求:
using Microsoft.Extensions.Logging.Abstractions; ServiceCollection services = new(); // 注册空日志工厂,不需要实际日志输出 services.AddSingleton<ILoggerFactory, NullLoggerFactory>(); services.AddLocalization(options => options.ResourcesPath = "Localization"); services.AddSingleton<ILocalizationService, LocalizationService>(); services.AddScoped<IEntityService, EntityService>(); var provider = services.BuildServiceProvider();
2. 改用DI容器获取服务
不要手动new EntityService,而是让DI容器帮你创建实例并注入依赖:
// 替换手动实例化的代码 IEntityService service = provider.GetRequiredService<IEntityService>();
注意事项
NullLoggerFactory属于Microsoft.Extensions.Logging.Abstractions包,确保你的项目已引用该包(.NET 8控制台应用通常默认包含,若缺失可通过NuGet安装)。- 手动实例化服务会绕过DI的依赖管理,这不仅容易引发此类错误,也违背了DI的设计初衷,建议始终通过容器获取服务实例。
内容的提问来源于stack exchange,提问作者ZotNet
相关产品推荐
相关产品推荐

