获取C#.Net Core 3.0中没有构造函数调用的appsettings.json值

问题描述 投票:0回答:1

我有一个来自较早的.NET Core早期项目的类,我正在尝试使其读取appsettings.json数据。要注意的是,它的调用方式似乎不会唤起构造函数,因此通常的IOptions<AppSettings>构造函数注入方法无效。

通过该方法调用该类:

 private static string GetItemUrl(string language, string itemId)
    {
        return LinkHelp.Instance.Builder.BuildEditItemUrl(language, itemId);
    }

然后直接进入以下方法:

private LinkHelp()
    {
        // Various attempts at getting a config setting here
        var linkBuilderoptions = new ContentManagementHelpersOptions() { ProjectId = projectId };
        Builder = new LinkBuil(linkBuildoptions);         
    }

该方法确实使用了旧的pre-core AppSettingProvider.ProjectId方法来从web.config获取项目ID:

var projectId = AppSettingProvider.ProjectId.ToString() ?? AppSettingProvider.DefaultProjectId.ToString();

我是否只需要将web.config添加到项目中并继续使用旧方法?还是有一种方法可以使它与.Net Core 3.0一起使用?

c# asp.net-core appsettings constructor-injection
1个回答
0
投票

您可以在引导过程中像这样访问您的配置。

这是您的“程序”的外观:

public class Program
{
    public static void Main(string[] args)
    {
        var host = CreateWebHostBuilder(args).Build();
        host.Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseIISIntegration()
            .UseStartup<Startup>();
}

在您的启动类中,您可以像这样注入IConfiguration的实现:

public class Startup : ServiceStartup
{
    private readonly IConfiguration _configuration;

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

    /// <summary>
    ///     This method gets called by the runtime. Use this method to add services to the container.
    /// </summary>
    /// <param name="services"></param>
    public void ConfigureServices(IServiceCollection services)
    {
        var yourConfiguration = new YourOwnConfigurationClass();
        _configuration.Bind(nameof(YourOwnConfigurationClass), yourConfiguration );
        services.AddSingleton(yourConfiguration )
    }
} 

现在可以注射YourConfigurationClass。>>

© www.soinside.com 2019 - 2024. All rights reserved.