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

.NET 7 Web API基于Autofac无法注册到Eureka的问题排查

.NET 7 Web API注册Eureka时Autofac依赖解析异常问题

问题背景

在独立.NET 7类库项目中使用Autofac配置服务注册,尝试将Web API应用注册到Eureka服务器时,出现Autofac依赖解析异常,尽管已添加Eureka相关配置。

相关代码与配置

CoreModule代码

using Project.Services.Core.Extensions;
using Project.Services.Core.Utilities.IoC;
using Microsoft.Extensions.DependencyInjection;
using StackExchange.Redis;
using System.Diagnostics;
using Serilog;
using Microsoft.Extensions.Configuration;
using Steeltoe.Discovery.Client;
using Steeltoe.Discovery.Eureka;

namespace Project.Services.Core.DependencyResolvers
{
    public class CoreModule : ICoreModule
    {
        public void Load(IServiceCollection services, IConfiguration configuration)
        {
            services.AddServiceDiscovery(o => o.UseEureka());

            services.AddMemoryCache();
            services.AddSingleton<ICacheManager, MemoryCacheManager>();
            services.AddSingleton<IDistributedCacheManager, DistributedCacheManager>();
            services.AddHttpContextAccessor();
            services.AddSingleton<Stopwatch>();
        }
    }
}

Program.cs代码

builder.Services.AddDependencyResolvers(new ICoreModule[]
            {
                new CoreModule()
            }, builder.Configuration);

appsettings.json配置

"Spring": {
    "Application": {
      "Name": "STOCK-SERVICE"
    }
  },
  "Eureka": {
    "Client": {
      "ServiceUrl": "http://localhost:867/eureka/",
      "ValidateCertificates": false,
      "ShouldRegisterWithEureka": true
    },
    "Instance": {
      "NonSecurePort": 5004,
      "HostName": "localhost",
      "InstanceId": "Stock.API,Port:5004",
      "StatusPageUrlPath": "/swagger/index.html"
    }
  }

错误详情

Autofac.Core.DependencyResolutionException
  HResult=0x80131500
  Message=激活 λ:Microsoft.Extensions.Hosting.IHostedService[] -> Steeltoe.Discovery.Client.DiscoveryClientService -> λ:Steeltoe.Discovery.IDiscoveryClient -> λ:Steeltoe.Discovery.Eureka.EurekaDiscoveryClient -> Steeltoe.Discovery.Eureka.EurekaApplicationInfoManager 时引发异常。
  Source=Autofac
  StackTrace:
   at Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
   ...(省略部分栈信息)
   at Program.<Main>$(String[] args) 

DependencyResolutionException: 调用类型'EurekaApplicationInfoManager'的构造函数'Void .ctor(Microsoft.Extensions.Options.IOptionsMonitor`1[Steeltoe.Discovery.Eureka.EurekaInstanceOptions], Microsoft.Extensions.Logging.ILoggerFactory)'时引发异常。

NullReferenceException: 对象引用未设置到对象的实例。

解决方案

1. 显式绑定Eureka配置选项

在CoreModule的Load方法中,添加对Eureka配置选项的显式绑定,确保IOptionsMonitor<EurekaInstanceOptions>和IOptionsMonitor<EurekaClientOptions>被正确注入:

public void Load(IServiceCollection services, IConfiguration configuration)
{
    // 绑定Eureka实例和客户端配置
    services.Configure<EurekaInstanceOptions>(configuration.GetSection("Eureka:Instance"));
    services.Configure<EurekaClientOptions>(configuration.GetSection("Eureka:Client"));
    
    services.AddServiceDiscovery(o => o.UseEureka());

    // 其他服务注册...
    services.AddMemoryCache();
    services.AddSingleton<ICacheManager, MemoryCacheManager>();
    services.AddSingleton<IDistributedCacheManager, DistributedCacheManager>();
    services.AddHttpContextAccessor();
    services.AddSingleton<Stopwatch>();
}

2. 检查Autofac集成流程

确保Program.cs中正确配置Autofac作为服务提供工厂,示例如下:

var builder = WebApplication.CreateBuilder(args);

// 指定使用Autofac作为服务提供工厂
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());

// 添加模块
builder.Services.AddDependencyResolvers(new ICoreModule[]
{
    new CoreModule()
}, builder.Configuration);

// 其他配置...
var app = builder.Build();

3. 验证Steeltoe版本兼容性

确保使用与.NET 7兼容的Steeltoe Discovery包版本(推荐3.2.x及以上),可通过NuGet包管理器检查并更新Steeltoe.Discovery.Client和Steeltoe.Discovery.Eureka包版本。

4. 检查Eureka配置正确性

  • 确认Eureka服务器的ServiceUrl端口是否正确(默认Eureka端口为8761,当前配置为867,需核对实际服务器端口)
  • 确保Eureka:Instance中的配置项完整,没有缺失必要字段

内容的提问来源于stack exchange,提问作者Avora

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:27:42