如何通过依赖注入在Worker Service和WebService之间传递公共对象



我已经编写了一个.net core 3 workerservice,该服务在同一项目中也内置了一个webapi,目的是使托管的workerservice能够呈现一个健康检查webapi,该webapi可以被询问以提供工作服务状态信息。我们使用一个通用模式将healthcheck调用添加到我们所有的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();
}

将该服务注入工作进程以持久化数据,并将其注入控制器以检索数据。

最新更新