. Net Core 3.1 - несколько размещенных сервисов с независимыми конфигурациями. - PullRequest
0 голосов
/ 29 мая 2020

Насколько мне известно, можно добавить несколько размещенных сервисов для работы под одним и тем же «хостом», как этот пример взят из Microsoft page :

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

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

Если вместо что я создаю три разных проекта, можно было бы ввести три разные конфигурации для каждого из них.

Есть ли способ сделать это в одном проекте? Может быть, загрузка разных файлов конфигурации (appsettings. json)?

Like:

  • Для размещенной службы GracePeriodManagerService appsettings.graceperiod. json
  • Для размещенной службы MyHostedServiceB appsettings.myHostedServiceB. json

Или с разделением по папкам:

  • Для размещенной службы GracePeriodManagerService GracePeriodManagerService \ appsettings. json
  • Для размещенной службы MyHostedServiceB MyHostedService настройки приложения. json

Ответы [ 2 ]

2 голосов
/ 29 мая 2020

Вы можете сделать это разными способами.

Лучшим способом было бы использовать шаблон 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));

Если вы все еще хотите использовать несколько файлов appsetings, вы можете сделать следующее.

В 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();
         }

Затем вы можете использовать отдельные конфигурации по запросу.

1 голос
/ 29 мая 2020

При настройке вашего приложения вы можете определить, откуда брать конфигурацию (например, см. этот блог ). Каждый файл может иметь раздел с желаемыми настройками, а отдельные размещенные службы могут получить соответствующую конфигурацию, используя configuration.GetSection().

...