在 .Net Core Worker Service 中托管 Web API - 无法引用 IWebHostEnvironment [英] Hosting Web API in .Net Core Worker Service - cannot reference IWebHostEnvironment

查看:73
本文介绍了在 .Net Core Worker Service 中托管 Web API - 无法引用 IWebHostEnvironment的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在创建一个 .NET Core Worker Service,并希望为该服务公开 ASP.Net Core Web API.我正在使用 .NET Core 3.0.最初,我的计划是用 IWebHostBuilder 替换 IHostBuilder 并添加一个 Startup 类,就像常规的 Asp.Net Core Web 应用程序一样(不过,这可能过于简化了).

I'm creating a .NET Core Worker Service, and want to expose ASP.Net Core Web APIs for the service. I'm using .NET Core 3.0. Initially, my plan was to replace IHostBuilder with IWebHostBuilder and add a Startup class just like a regular Asp.Net Core web app (this is probably an oversimplification, though).

我的计划是简单地尝试替换

My plan was to simply try to replace

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 不可用.

which may not work at all, but at least it's a starting point... What's blocking me from trying this approach is that I cannot implement my Startup class because IWebHostEnvironment is unavailable.

这是我的

<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 包中,但引用它似乎不起作用.

As far as I know, IWebHostEnvironment should be in the Microsoft.Extensions.Hosting.Abstractions nuget package, but referencing it does not seem to work.

有人有什么想法吗?-谢谢!

Does anyone have any ideas? -Thanks!

推荐答案

向 API 项目添加服务要容易得多.这只是额外的一行.

It is much easier to add a service to an API project. That's just one extra line.

如果您不能或不想重新开始,请手动更改您的项目.忘记 IWebHostBuilder,它现在已经过时或不推荐使用了.

If you can't or don't want to start over, change your project manually. Forget about IWebHostBuilder, it is now obsolete or deprecated or something.

我可以在这里发布一些片段,但要容易得多:创建一个临时 API 项目,复制 Program 和 Startup 类(但保留您的命名空间),然后在 Startup 中:

I could post some fragments here but much easier: create a temporary API project, copy over the Program and Startup classes (but keep your namespaces) and then, inside Startup:

public void ConfigureServices(IServiceCollection services)
{
    services.AddHostedService<Worker>();  // the worker will run
    services.AddControllers();
}

这篇关于在 .Net Core Worker Service 中托管 Web API - 无法引用 IWebHostEnvironment的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆