web-dev-qa-db-ja.com

.NET Core 2のクラスからappsettings.jsonを読み取ります

ビジネスクラスのappsettings.jsonファイル(セクション:placeto)からプロパティのリストを読み取る必要がありますが、それらにアクセスできませんでした。これらのプロパティを公開する必要があります。

Programクラスにファイルを追加します。

Class program

これは私のappsettings.jsonです:

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

最初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();
}

Second:クラスのインターフェイスを作成し、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"];
        }
    }
}

Third:その後、startup.csで、次を呼び出してクラスの依存性注入を実装します。

services.AddSingleton< ITest, Test>();

ConfigureServicesメソッドで

これで、依存関係注入で使用されるクラスにもクラスインスタンスを渡すことができます。


たとえば、クラスを使用するExampleControllerがある場合は、次を実行します。

 private readonly ITest _test;

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

これで、コントローラーのどこからでもアクセスできる_testインスタンスができました。

15