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

问题描述 投票:1回答:1

我已经编写了.net core 3 workerservice,它在同一项目中还内置了一个webapi-目的是使托管的worker服务能够显示运行状况检查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; }
    }

有人在这里帮助我吗?

c# .net-core dependency-injection service asp.net-core-webapi
1个回答
1
投票
只需创建一个知道如何持久保存和检索共享数据的服务。

过度简化抽象

public interface IStatusService { Task Save(StatusInfo status); Task<StatusInfo> Get(); }

将该服务注入工作程序以保留数据,然后将其注入控制器以检索数据。
© www.soinside.com 2019 - 2024. All rights reserved.