我需要在早期访问 appsettings.json
,所以我为 IHostBuilder
创建了一个扩展方法:
public static class MyClass1
{
public static bool property1
public static string property2;
public static IHostBuilder UseMyService(this IHostBuilder builder, Action<HostBuilderContext> context)
{
//Here what?
return builder;
}
public static MyServiceClass MyService => new MyServiceClass(property1, property2);
}
在 Program.cs
中,我做到了:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
var builder = config.Build();
var env = context.HostingEnvironment;
config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
})
.UseMyService((context) =>
{
//Here what?
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
我需要从配置中设置属性 property1
和 property2
(我知道怎么做)。
但是我需要在 UseMyService
扩展方法中设置它们(我那里只有一个 Action)还是在 CreateHostBuilder
中?
答案 0 :(得分:0)
你的问题很清楚,你没有在评论中回答我们的问题也无济于事,所以猜你想要什么,这是你可以做的:
public static class Hosting
{
public static bool _property1;
public static string _property2;
public static IHostBuilder UseMyService(this IHostBuilder builder)
{
return builder.ConfigureServices((context, _) =>
{
_property1 = context.Configuration["Property1"].ToLower() == "true";
_property2 = context.Configuration["Property2"];
});
}
}
如您所见,您可以通过 HostBuilderContext
访问配置,该配置可以通过 Microsoft.Extensions.Hosting.Abstractions
中的某些扩展访问。
请注意,不需要您在代码中显示的整个 ConfigureAppConfiguration
部分:CreateDefaultBuilder
已经为您完成了所有这些事情(以及更多)。报价
以下默认值应用于返回的 HostBuilder:
(编辑,您也可以使用 ConfigurationBinder
方法,例如 GetValue<bool>
等)