将.NET Core IConfiguration注入Singleton

3

我有以下单例类,我希望在我的应用程序中使用:

public sealed class AppSettings
{
    private static readonly Lazy<AppSettings> _lazy =
        new Lazy<AppSettings>(() => new AppSettings());

    private AppSettings()
    {
        // I want to inject this
        var builder = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile($"appsettings.json", optional: true, reloadOnChange: true);

        Config = builder.Build();
    }

    public static AppSettings Instance => _lazy.Value;

    public IConfigurationRoot Config { get; }
}

我想注入IConfiguration而不是在其中构建它。我该怎么做?

1个回答

7
您不需要创建自己的单例类。相反,可以创建一个普通类并将其注册/添加到DI容器中作为单例:
public sealed class AppSettings
{
    private IConfiguration _configuration;

    public AppSettings(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    ...
}

然后在ConfigureServices方法中只需使用以下内容:

// IConfigurationRoot ConfigureServices;

services.AddSingleton(new AppSettings(Configuration));

2
services.AddSingleton<AppSettings>(); - ziomyslaw

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