【发布时间】:2021-07-15 10:48:35
【问题描述】:
我试图弄清楚如何使用主机构建器模式来运行控制台应用程序(而不是 Windows 服务)。目的是保持流程与 WebApi 相似,以保持开发实践相似。我已经看到了使用 HostedService 或 BackGroundService 的示例,他们希望将其作为 Windows 服务运行。但是如果我想运行一个简单的控制台应用程序,我在哪里指定我的入口点类和方法?从 hostbuilder.Build() 中,我可以看到 Run() 和 RunAsync() 方法。但我无法弄清楚它会执行什么?
我已经看到了其他示例,您可以在其中创建 servicecollection,然后使用 serviceprovider.GetService().SomeMethod() 来启动该过程。但这偏离了我们想要做的事情。所以请建议如何指定启动过程。我们使用的是 3.1 .Net Core。
class Program
{
static async void Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
await host.RunAsync();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostBuilderContext, serviceCollection) => new Startup(hostBuilderContext.Configuration).ConfigureServices(serviceCollection))
.UseSerilog()
;
}
【问题讨论】:
-
使用
dotnet new worker创建工作应用程序。它使用主机构建器模式并且开箱即用。 -
感谢您的建议。我尝试过这个。它使用 HostedService。那么使用 HostedService 是唯一的使用方法吗,即使我没有将控制台应用程序作为 Windows 服务运行?
-
不,您不必使用托管服务。您可以使用工作器项目模板作为如何设置 DI 容器的参考。拥有主机后,您可以使用它来解析服务并在
Main方法中调用它们,无需指定入口点。或者直接使用托管服务,它不需要是 windows/systemd 服务才能运行。
标签: c# asp.net-core .net-core console-application