c# - 如何使用依赖注入在 Worker Service 和 WebService 之间传递公共对象
问题描述
我编写了一个 .net core 3 workerservice,它也有一个内置到同一个项目中的 webapi - 目的是使托管的 workerservice 能够呈现一个 healthcheck webapi,可以对其进行询问以提供 worker 服务状态信息。我们使用一种通用模式向我们所有的 webapi 微服务添加运行状况检查调用。
workerservice 和 webapi 本身都可以正常工作,但我无法弄清楚如何将公共对象注入到两个服务中,以用于在两者之间来回传递数据。
我假设我必须在 Program 类的 CreateHostBuilder 方法中创建状态对象并将其注入两者但找不到任何合适的方法来传递它。
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
// HealthCheck WebAPI
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseKestrel();
webBuilder.UseContentRoot(Directory.GetCurrentDirectory());
webBuilder.UseIISIntegration();
webBuilder.UseStartup<Startup>();
})
.ConfigureHostConfiguration(configHost =>
{
configHost.SetBasePath(Directory.GetCurrentDirectory());
configHost.AddJsonFile("hosting.json", optional: false);
})
// WorkerService
.ConfigureAppConfiguration((hostContext, config) =>
{
config
.SetBasePath(Environment.CurrentDirectory)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{hostContext.HostingEnvironment.EnvironmentName.ToLower()}.json", optional: false);
config.AddEnvironmentVariables();
})
.ConfigureServices((hostContext, services) =>
{
services.AddOptions();
services.AddHostedService<Worker>();
});
状态对象可能类似于...
public class StatusInfo
{
public DateTime LastRun { get; set; }
public int LastAdded { get; set; }
public int LastUpdated { get; set; }
}
请问有人帮我吗?
解决方案
只需创建一个知道如何保存和检索共享数据的服务。
过度简化的抽象
public interface IStatusService {
Task Save(StatusInfo status);
Task<StatusInfo> Get();
}
将该服务注入工作人员以持久化数据并将其注入控制器以检索数据。
推荐阅读
- java - 错误:-source 1.3 不支持注释(使用 -source 5 或更高版本启用注释)
- django - Django通过保存按钮更新html行上的所有对象
- python - 如何使用一些规则将一些纯文本输出转换为 JSON?
- elasticsearch - 弹性转储失败,java script out pf memory
- python - 无法从 Anaconda Navigator 启动 Spyder
- java - 如何在 Java 8 中干净地执行具有异步超时的任务
- c++ - cmake + clang_tidy - 禁用签入目录
- javascript - onclick 内的多个 var:Strings 和 Int
- mysql - SQL 搜索两列并替换第三列
- scala - Bundle 的 Vec 作为 Module 参数