0

据我所知,可以添加多个托管服务以在同一个“主机”下运行,就像这个例子取自微软页面

public IServiceProvider ConfigureServices(IServiceCollection services)
{
    //Other DI registrations;

    // Register Hosted Services
    services.AddHostedService<GracePeriodManagerService>();
    services.AddHostedService<MyHostedServiceB>();
    services.AddHostedService<MyHostedServiceC>();
    //...
}

如果不是我创建三个不同的项目,则可以为每个项目注入三种不同的配置。

有没有办法在同一个项目中做到这一点?也许加载不同的配置文件(appsettings.json)?

喜欢:

  • 对于托管服务GracePeriodManagerService appsettings.graceperiod.json
  • 对于托管服务MyHostedServiceB appsettings.myHostedServiceB.json

或按文件夹分隔:

  • 对于托管服务GracePeriodManagerService GracePeriodManagerService\appsettings.json
  • 对于托管服务MyHostedServiceB MyHostedServiceB\appsettings.json
4

2 回答 2

2

您可以通过多种方式做到这一点。

最好的方法是使用IOptions模式:在您的 appsettings 文件中,您可以添加:

"Position": {
    "Title": "Editor",
    "Name": "Joe Smith"
  }

您应该有一个与上面的 json 对象匹配的类:

public class PositionOptions

{
    public const string Position = "Position";

    public string Title { get; set; }
    public string Name { get; set; }
}

最后,您可以通过以下方式将其注入 DI 容器:

services.Configure<PositionOptions>(Configuration.GetSection(
                                        PositionOptions.Position));

如果您仍想使用多个 appsettings 文件,您可以执行以下操作。

在 Startup.cs 中:

        private readonly IConfiguration _configurationName1;
        private readonly IConfiguration _configurationName2;
        public Startup(IConfiguration configuration)
        {
            _configurationName1 = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettingsWorker1.json")
            .Build();

            _configurationName2 = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettingsWorker2.json")
            .Build();
         }

然后您可以根据需要使用单独的配置。

于 2020-05-29T07:30:24.417 回答
1

配置应用程序时,您可以定义从何处获取配置(例如,请参阅此博客文章)。每个文件都可以有一个包含您想要的设置的部分,并且各个托管服务可以使用configuration.GetSection().

于 2020-05-29T06:55:03.433 回答