Размещение веб-API в .Net Core Worker Service - не может ссылаться на IWebHostEnvironment - PullRequest
1 голос
/ 07 октября 2019

Я создаю .NET Core Worker Service и хочу предоставить ASP.Net Core Web API для этой службы. Я использую .NET Core 3.0. Первоначально я планировал заменить IHostBuilder на IWebHostBuilder и добавить класс Startup, как обычное веб-приложение Asp.Net Core (хотя это, вероятно, упрощение).

Мой план состоял в том, чтобы просто попытаться заменить

public static IHostBuilder CreateHostBuilder(string[] args)
        {
            return Host.CreateDefaultBuilder(args)                
                .ConfigureServices((hostContext, services) =>
                {
                    services.AddHostedService<Worker>();
                });
        }

на

public static IWebHostBuilder CreateHostBuilder(string[] args)
        {
            return WebHost.CreateDefaultBuilder(args)
                .ConfigureServices(services =>
                {
                    services.AddHostedService<Worker>();
                }).UseStartup<Startup>();            
        }

, который может вообще не работать, но, по крайней мере, это отправная точка ... Что мешает мне попробовать этот подход, так это то, что я не могу реализовать свой класс Startup, потому что IWebHostEnvironment недоступен.

Вот мой

<PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <UserSecretsId>dotnet-WorkerServices-0E977A2C-F0C8-49E7-B00A-5EB01B99FBEB</UserSecretsId>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />
    <PackageReference Include="Microsoft.AspNetCore.Hosting.Server.Abstractions" Version="2.2.0" />
    <PackageReference Include="Microsoft.Extensions.Hosting" Version="3.0.0" />
    <PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="3.0.0" />
  </ItemGroup>

Насколько я знаю, IWebHostEnvironment должен быть в пакете Microsoft.Extensions.Hosting.Abstractions nuget, но ссылка на него, похоже, не работает.

У кого-нибудь есть какие-либо идеи? -Спасибо!

1 Ответ

0 голосов
/ 07 октября 2019

Гораздо проще добавить сервис в проект API. Это всего лишь одна дополнительная строка.

Если вы не можете или не хотите начинать сначала, измените свой проект вручную. Забудьте о IWebHostBuilder, теперь оно устарело или устарело или что-то в этом роде.

Я мог бы опубликовать некоторые фрагменты здесь, но гораздо проще: создать временный проект API, скопировать классы Program и Startup (но сохранить ваши пространства имен), а затем внутри Startup:

public void ConfigureServices(IServiceCollection services)
{
    services.AddHostedService<Worker>();  // the worker will run
    services.AddControllers();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...