我有一个来自较早的.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一起使用?
您可以在引导过程中像这样访问您的配置。
这是您的“程序”的外观:
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
。>>