.net coreリリースlinuxエラー「The configured user limit(128)on the number of inotify instances has been reached」

1872 ワード

https://stackoverflow.com/questions/45875981/error-while-reading-json-file-in-dotnet-core-the-configured-user-limit-128-on
var builder = new ConfigurationBuilder()
        .AddJsonFile($"appsettings.json", true, true);

You are creating file watchers, every time you access an setting. The 3rd parameter is reloadOnChange. You have to make sure,
var configuration = builder.Build()

is only called once in your application and store it in a place where you can access it (preferably AVOID static fields for it).
Or just disable the file watcher.
  var builder = new ConfigurationBuilder()
        .AddJsonFile($"appsettings.json", true, false);

or cleaner:
var builder = new ConfigurationBuilder()
        .AddJsonFile($"appsettings.json", optional: true, reloadOnChange: false);

Best way is to abstract hat behind an interface and use dependency injection.
public interface IConfigurationManager
{
    T GetAppConfig(string key, T defaultValue = default(T));
}

public class ConfigurationManager : IConfigurationManager
{
    private readonly IConfigurationRoot config;

    public ConfigurationManager(IConfigurationRoot config)
        => this.config ?? throw new ArgumentNullException(nameof(config));

    public T GetAppConfig(string key, T defaultValue = default(T))
    {
        T setting = (T)Convert.ChangeType(configuration[key], typeof(T));
        value = setting;
        if (setting == null)
            value = defaultValue;
    }
}

Then instantiate and register it
services.AddSingleton(new ConfigurationManager(this.Configuration));

and inject it into your services via constructor