.NET 8控制台应用依赖注入失败,API中运行正常
.NET 8控制台应用中SafeILogger依赖注入失败问题解决
问题场景
在.NET 8 API项目中,集成SharePoint工具库及自定义FileUploader的依赖注入运行正常,但在控制台应用中实例化FileUploader时出现以下错误:
'Unable to resolve service for type 'Microsoft.Extensions.Logging.ILogger
1[Common.SharePoint.Utils.SharePointClient]' while attempting to activate 'Common.Api.Logging.SafeILogger1[Common.SharePoint.Utils.SharePointClient]'.'
根因分析
- API项目自动集成Logging服务:
WebApplication.CreateBuilder(args)会默认配置并注册日志相关服务(包括ILogger<T>的实现),因此SafeILogger<T>依赖的ILogger<T>能被DI容器正常解析。 - 控制台应用缺失Logging服务注册:手动创建
ServiceCollection时,未添加日志服务,导致DI容器找不到ILogger<T>的实例,无法完成SafeILogger<T>的激活。
解决方案
在控制台应用的服务注册流程中,添加Logging服务并配置日志输出(如控制台日志),修改后的代码如下:
var services = new ServiceCollection(); // 添加Logging服务,配置控制台输出 services.AddLogging(builder => { builder.AddConsole(); // 可选:添加Debug日志输出 builder.AddDebug(); }); services.AddSafeILogger(); services.AddScoped<IFileUploader, FileUploader>(); services.AddSharePointUtils(); var serviceProvider = services.BuildServiceProvider(); var fileUploader = serviceProvider.GetRequiredService<IFileUploader>();
补充说明
需确保SafeILogger<T>的构造函数确实依赖ILogger<T>(示例结构如下),这是依赖链的核心节点:
public class SafeILogger<T> : ILogger<T> { private readonly ILogger<T> _innerLogger; public SafeILogger(ILogger<T> innerLogger) { _innerLogger = innerLogger ?? throw new ArgumentNullException(nameof(innerLogger)); } // 实现ILogger<T>的接口方法... }
内容的提问来源于stack exchange,提问作者Tanveer-Ibn- Haresh
相关产品推荐
相关产品推荐

