在.NET Core 2中从类中读取appsettings.json

15

我需要从业务类中读取appsettings.json 文件(section: placeto) 中的一组属性,但是我无法访问它们。我需要这些属性是公共的。

我在Program类中添加了该文件:

Class program

这是我的appsettings.json文件:

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "placeto": {
    "login": "fsdfsdfsfddfdfdfdf",
    "trankey": "sdfsdfsdfsdfsdf"
  }
}

1
可能是 https://dev59.com/nKXja4cB1Zd3GeqPWcmC#46632521 的重复问题。 - anserk
这份来自微软的文档解释了如何进行配置=> https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration?tabs=basicconfiguration - CodeNotFound
但我需要在自定义类中进行读取,示例在控制器中,并尝试了几种选项。在.Net标准中使用 string userName = System.Configuration.ConfigurationManager.AppSettings["PFUserName"]; 读取web.config,在.Net Core中等效的是 @CodeNotFound。 - Jhon Diaz
2
我提供的答案展示了如何在一个类中使用 appsettings.json。在那个例子里,用的是 LocalMailService,但其实可以是任何你想要的东西。 - anserk
1个回答

17

第一步:使用program.cs中的默认设置,因为它已经添加了配置:

public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();
}

第二步:为您的类创建一个接口,并通过创建Iconfiguration字段并使用依赖项注入来传递配置:

private readonly IConfiguration Configuration;

然后通过构造函数传递它:

public Test(IConfiguration configuration)
{
    Configuration = configuration;
}

为了正确使用依赖注入(Dependency Injection),请创建一个适用于您的类的接口。这样就可以创建该类的实例而无需传递IConfiguration

以下是类和接口:

using Microsoft.Extensions.Configuration;

namespace GetUserIdAsyncNullExample
{
    public interface ITest { void Method(); }

    public class Test : ITest
    {
        public Test(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        private readonly IConfiguration Configuration;
        public void Method()
        {
            string here = Configuration["placeto:login"];
        }
    }
}

第三步:然后在您的startup.cs中通过调用以下内容为您的类实现依赖注入:

services.AddSingleton< ITest, Test>();

在你的ConfigureServices方法中,现在你可以将你的类实例传递给任何由依赖注入使用的类。


例如,如果你有一个ExampleController想要在其中使用你的类,请按照以下步骤操作:

 private readonly ITest _test;

 public ExampleController(ITest test) 
 {
     _test = test;          
 } 

现在您有一个_test实例,可以在控制器的任何位置访问它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接