gui*_*r86 9 c# appsettings .net-core worker-service
我创建了一个 .net core 辅助服务,并将 IConfiguration 注入其中,以便我可以从 appsettings.json 读取属性,但每次运行该文件时,该属性都会显示为 null。但是,如果我强制 IConfiguration 通过 ConfigurationBuilder 添加 json 文件,它就可以工作。如何使用默认设置来允许 .net core 辅助服务从 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;
}
Run Code Online (Sandbox Code Playgroud)
这是 appsettings.json 文件
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"WatcherConfig":{
"filePath":"/Users/###/Documents/Development/ImageDrop"
}
}
Run Code Online (Sandbox Code Playgroud)
这是 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>();
});
}
Run Code Online (Sandbox Code Playgroud)
这是 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>();
});
}
Run Code Online (Sandbox Code Playgroud)
小智 2
构建Host服务时,必须读取Program.cs中的App设置。查看 Host.CreateDefaultBuilder 的作用,如果您决定不使用默认构建器,则可能需要隐式加载设置。
如果您还有其他问题,请附上 Program.cs 文件,因为 IConfiguration 取决于其初始化而不是服务中的使用情况。
| 归档时间: |
|
| 查看次数: |
15197 次 |
| 最近记录: |