C# .NET Core API正在抛出Autofac.Core.DependencyResolutionException

C# .NET Core API正在抛出Autofac.Core.DependencyResolutionException,c#,mongodb,kubernetes,.net-core,autofac,C#,Mongodb,Kubernetes,.net Core,Autofac,我有一个API和MongoDB,它托管在Kubernetes上(特别是AWS上的EKS)。虽然我的API在本地和Docker本地上运行完全正常,但它不在Kubernetes集群上 当我从kubernetes logs-f获取日志时,我得到以下异常: Unexpected generic exception occurred Autofac.Core.DependencyResolutionException: An exception was thrown while activating Qu

我有一个API和MongoDB,它托管在Kubernetes上(特别是AWS上的EKS)。虽然我的API在本地和Docker本地上运行完全正常,但它不在Kubernetes集群上

当我从
kubernetes logs-f
获取日志时,我得到以下异常:

Unexpected generic exception occurred Autofac.Core.DependencyResolutionException: An exception was thrown while activating QueryService -> Database -> DbClient.
       ---> Autofac.Core.DependencyResolutionException: An exception was thrown while invoking the constructor 'Void .ctor(Microsoft.Extensions.Options.IOptions`1[DbOptions])' on type 'DbClient'.
       ---> System.ArgumentNullException: Value cannot be null. (Parameter 'connectionString')
         at MongoDB.Driver.Core.Misc.Ensure.IsNotNull[T](T value, String paramName)
         at MongoDB.Driver.Core.Configuration.ConnectionString..ctor(String connectionString, IDnsResolver dnsResolver)
         at MongoDB.Driver.Core.Configuration.ConnectionString..ctor(String connectionString)
         at MongoDB.Driver.MongoUrlBuilder.Parse(String url)
         at MongoDB.Driver.MongoUrlBuilder..ctor(String url)
         at MongoDB.Driver.MongoUrl..ctor(String url)
         at MongoDB.Driver.MongoClientSettings.FromConnectionString(String connectionString)
         at MongoDB.Driver.MongoClient..ctor(String connectionString)
         at Mongo.DbOperations..ctor(String connectionString, String dataBase, String collection) in /src/Mongo/DbOperations.cs:line 36
         at DbClient..ctor(IOptions`1 DbOptions) in /src/DbClient.cs:line 22
         at lambda_method(Closure , Object[] )
         at Autofac.Core.Activators.Reflection.ConstructorParameterBinding.Instantiate()
         --- End of inner exception stack trace ---
         at Autofac.Core.Activators.Reflection.ConstructorParameterBinding.Instantiate()
         at Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance(IComponentContext context, IEnumerable`1 parameters)
         at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable`1 parameters, Object& decoratorTarget)
         --- End of inner exception stack trace ---
         at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable`1 parameters, Object& decoratorTarget)
         at Autofac.Core.Resolving.InstanceLookup.Execute()
         at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, ResolveRequest request)
         at Autofac.Core.Resolving.ResolveOperation.Execute(ResolveRequest request)
         at Autofac.Features.LazyDependencies.LazyRegistrationSource.<>c__DisplayClass5_1`1.<CreateLazyRegistration>b__1()
         at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
         at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
         at System.Lazy`1.CreateValue()
         at Api.Controllers.MainController.<>c__DisplayClass4_0.<<ListLogicalDevicesAsync>b__0>d.MoveNext() in /src/Api/Controllers/Main/List.cs:line 40
      --- End of stack trace from previous location where exception was thrown ---
         at Api.Controllers.StandardController.ProcessExceptionsAsync(Func`1 action) in /src/Api/Controllers/StandardController.cs:line 64
My
DbClient.cs

public DbOperations(string connectionString, string dataBase, string collection)
    var mongoClient = new MongoClient(connectionString);
    var mongoDatabase = mongoClient.GetDatabase(dataBase);
     _collection = mongoDatabase.GetCollection<BsonDocument>(collection);
}
internal class DbClient : DbOperations, IDbClient
{
    public DbClient(IOptions<DbOptions> dbOptions) : 
        base(dbOptions.Value.ConnectionString,dbOptions.Value.Database, dbOptions.Value.DeviceCollection)
    {
    }
}
//In ConfigureContainer() method
builder.RegisterType<DbClient>().As<IDbClient>();

//In ConfigureServices() method
services.Configure<DbOptions>(configuration.GetSection("MainDb"));
public class DbOptions
{
    public string ConnectionString { get; set; }
    public string Database { get; set; }
    public string DeviceCollection { get; set; }
}
My
DbOptions.cs

public DbOperations(string connectionString, string dataBase, string collection)
    var mongoClient = new MongoClient(connectionString);
    var mongoDatabase = mongoClient.GetDatabase(dataBase);
     _collection = mongoDatabase.GetCollection<BsonDocument>(collection);
}
internal class DbClient : DbOperations, IDbClient
{
    public DbClient(IOptions<DbOptions> dbOptions) : 
        base(dbOptions.Value.ConnectionString,dbOptions.Value.Database, dbOptions.Value.DeviceCollection)
    {
    }
}
//In ConfigureContainer() method
builder.RegisterType<DbClient>().As<IDbClient>();

//In ConfigureServices() method
services.Configure<DbOptions>(configuration.GetSection("MainDb"));
public class DbOptions
{
    public string ConnectionString { get; set; }
    public string Database { get; set; }
    public string DeviceCollection { get; set; }
}
我的
appsetting.json

  "MainDb": {
    "Database": "main",
    "DeviceCollection": "data"
  }
  "MainDb": {
    "ConnectionString": "mongodb://<service-name>.default.svc.cluster.local:27017"
  }
我的
appsetting.Dev.json

  "MainDb": {
    "Database": "main",
    "DeviceCollection": "data"
  }
  "MainDb": {
    "ConnectionString": "mongodb://<service-name>.default.svc.cluster.local:27017"
  }
“MainDb”:{
“连接字符串”:mongodb://.default.svc.cluster.local:27017"
}
我可以知道有什么地方可能出错吗?是MongoDB连接字符串吗?还是无法获取连接字符串的依赖项注入


谢谢

根据异常消息和堆栈跟踪,
connectionString
null
。检查您的配置——它在您的非开发配置中丢失。

啊,这就是原因。不知道为什么它不能从dev config获得。我将连接字符串添加到非dev config中,它可以正常工作!谢谢