我有以下应用程序设置.核心项目中的json:

  "ABC": {
    "Url": "someurl",
    "Id": "as",
    "sec": "bc",
    "Username": "un",
    "Password": "pw",
  }

我创建了一个POCO:

public class ABC
{
    public string Username { get; set; }
    public string Password { get; set; }
}

这是我的节目.cs课程:

public class Program
{   
    public IConfiguration Configuration { get; }

    public static void Main(string[] args)
    {
        var logger = LogManager.GetCurrentClassLogger();
            
        try
        {
            CreateHostBuilder(args).Build().Run();
        }
        catch (OperationCanceledException oex)
        {
            logger.Error(oex, "Error during shutdown");
            Environment.ExitCode = 3;
        }
            
    }
    public void ConfigureServices(IServiceCollection services)
    {
        // Adds services required for using options.
        services.AddOptions();
        services.AddSingleton<ABC>();
        // Registers the following lambda used to configure options.
        services.Configure<ABC>(Configuration.GetSection("ABC"));

        //register other services
        services.AddSingleton<ABC>();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) 
                var config = hostContext.Configuration;

                // load ABC into an object
                var ABC = config.GetSection("ABC").Get<ABC>();
                ABC.AppSection = "ABC";
                services.AddSingleton(ABC);

                services.AddHostedService<Service>()
                .Configure<EventLogSettings>(config =>
                {
                    config.LogName = "Aname";
                    config.SourceName = "Asource";
                });
            })
            .ConfigureLogging((options) =>
            {
                options.AddFilter<EventLogLoggerProvider>(level => level >= Microsoft.Extensions.Logging.LogLevel.Information);
                options.AddNLog("some.log");
            })
            .UseWindowsService();
}

}

我想访问以下类中appsettings的值(在另一个项目中):

公共类OtherClass:SomeotherClass,SomeInterface

public OtherClass(ILogger<something> logger, IZXC ZXC)
    : base(logger, ZXC)
{
}


public void DoRunDotNetPython(CancellationToken token, command zxc, List<NameValuePair> asd)
{
    some code 
     //access the values here
}

我是个新手.net和任何形式的帮助将不胜感激.我也只添加了我认为相关的细节,如果我需要添加其他内容,请告诉我您可能需要的细节.

推荐答案

实现这一点的常用方法是:在DI中注册OtherClass(我认为您已经注册了ILogger<something> logger个in-ctor参数),为ABC添加另一个ctor参数,将其存储在字段中,并在方法中使用该字段(删除相应的参数).例如:

public class OtherClass : SomeotherClass, SomeInterface
{
    private string _Id;
    private readonly ABC ABC;


    public OtherClass(ILogger<something> logger, IZXC ZXC, IOptions<ABC> abc)
        : base(logger, ZXC)
    {
        ABC = abc.Value;
    }


    public void DoRunDotNetPython(CancellationToken token, Command myCommand, List<NameValuePair> agentSettings)
    {
        // use ABC here
    }

阅读更多:

Csharp相关问答推荐

.NET框架4.7.2项目如何引用.NET Core 2.2库?

我需要两个属性类吗

Select Many和默认IfEmpty内部Select Many错误工作

如何在C#中使用正则表达式抓取用逗号分隔的两个单词?

使用两个不同的枚举作为Switch语句中的CASE生成唯一值

使用C#HttpClient以多部分形式数据发送带有非ASCII文件名的文件的问题

Unix上的.NET(核心):.NET意外地未看到通过P/Invoke系统调用对环境变量进行的进程内修改

如何使用自定义负载均衡器管理Ocelot负载均衡器中的多线程和批读取

单元测试:模拟返回空

C#按名称从类获取属性值类型<;t>;,我需要反射吗?

RX操作员使用先前值进行扫描,信号来自值本身

{ or ; expected error如何解决此问题

忽略Visual Studio代码中的StyleCop规则

Azure队列触发器未使用隔离的工作进程执行

使用本地公共PEM文件加密字符串,使用Azure KayVault中的私钥解密

如何在更新数据库实体时忽略特定字段?

如何使ExecuteAsync异步运行

通过mini kube中的远程调试Pod与从emoteProcessPickerScript中解析错误输出的代码错误进行比较

LINQ在GROUP BY和JOIN之后获取子列表

方法加载时出现类型加载异常