我创建了一个 .net 核心工作服务,将 IConfiguration 注入其中,这样我就可以从 appsettings.json 读取一个属性,但是每次我运行该文件时,该属性都会显示为空。但是,如果我强制 IConfiguration 通过 ConfigurationBuilder 添加一个 json 文件,它就可以工作。如何使用默认设置来允许 .net core worker 服务从 appsettings 中读取?
public class ImageFileWatcher : IHostedService, IDisposable
{
private readonly ILogger _logger;
private readonly IConfiguration _configuration;
FileSystemWatcher _watcher;
public ImageFileWatcher(ILogger<ImageFileWatcher> logger, IConfiguration configuration)
{
_logger = logger;
_configuration = configuration;
// IConfigurationBuilder builder = new ConfigurationBuilder()
// .AddJsonFile("appsettings.json")
// .AddEnvironmentVariables();
// this._configuration = builder.Build();
}
public Task StartAsync(CancellationToken cancellationToken)
{
var watcherConfig = _configuration["WatcherConfig:filePath"];//this is where it comes up as null.
_logger.LogInformation($"Image File watcher started on path{watcherConfig}");
_watcher = new FileSystemWatcher(watcherConfig);
_watcher.Created += OnNewImage;
_watcher.EnableRaisingEvents = true;
return Task.CompletedTask;
}
这是 appsettings.json 文件
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"WatcherConfig":{
"filePath":"/Users/###/Documents/Development/ImageDrop"
}
}
这是 Program.cs 文件
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostContext, configBuilder) =>
{
configBuilder
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile("appsettings.Production.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables(prefix: "ImageService_")
.Build();
})
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<ImageFileWatcher>();
});
}
这是 Program 类的第二次尝试:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
IConfiguration builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile("appsettings.Production.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables(prefix: "ImageService_")
.Build();
hostContext.Configuration = builder;
services.AddHostedService<ImageFileWatcher>();
});
}