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

.NET 8控制台应用依赖注入失败,API中运行正常

.NET 8控制台应用中SafeILogger依赖注入失败问题解决

问题场景

在.NET 8 API项目中,集成SharePoint工具库及自定义FileUploader的依赖注入运行正常,但在控制台应用中实例化FileUploader时出现以下错误:

'Unable to resolve service for type 'Microsoft.Extensions.Logging.ILogger1[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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 06:53:22