gpt4 book ai didi

c# - AppSettings 未通过构造函数注入(inject)得到解决

转载 作者:行者123 更新时间:2023-11-30 13:35:33 24 4
gpt4 key购买 nike

我在 appsettings.json 中的配置如下:

{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
},
"GatewaySettings": {
"DBName": "StorageDb.sqlite",
"DBSize": "100"
}
}

这里是表示配置数据的类

 public class GatewaySettings
{
public string DBName { get; set; }
public string DBSize { get; set; }
}

配置服务如下:

  services.AddSingleton(Configuration.GetSection("GatewaySettings").Get<GatewaySettings>());

但是我收到了这个错误:

Value cannot be null. Parameter name: implementationInstance'

代码:

  public class SqlRepository
{
private readonly GatewaySettings _myConfiguration;

public SqlRepository(GatewaySettings settings)
{
_myConfiguration = settings;
}
}

依赖注入(inject)代码:

var settings = new IOTGatewaySettings();
builder.Register(c => new SqlRepository(settings))

背景

我将 ASPNET CORE 应用程序托管为 Windows 服务,.NET Framework 是 4.6.1

注意:类似的问题出现在这里,但没有提供解决方案。 System.ArgumentNullException: Value cannot be null, Parameter name: implementationInstance

最佳答案

不要将具体的数据模型类添加到 DI - 使用 IOptions<> framework .

在您的创业公司中:

services.AddOptions();

// parses the config section into your data model
services.Configure<GatewaySettings>(Configuration.GetSection("GatewaySettings"));

现在,在你的类里面:

public class SqlRepository
{
private readonly GatewaySettings _myConfiguration;
public SqlRepository(IOptions<GatewaySettings> gatewayOptions)
{
_myConfiguration = gatewayOptions.Value;
// optional null check here
}
}

注意:如果您的项目不包含 Microsoft.AspNetCore.All包,您需要添加另一个包 Microsoft.Extensions.Options.ConfigurationExtensions获得此功能。

关于c# - AppSettings 未通过构造函数注入(inject)得到解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50911246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com