roo*_*ook 15 c# console-application .net-core
我正在尝试创建一个 dotnet 核心控制台应用程序。该应用程序是一个简单的实用程序应用程序,应该启动,执行其操作并退出。使用 Visual Studio 生成的标准控制台应用程序模板很容易实现。但是现在我们有了 HostBuilder,它似乎更有吸引力,因为它带来了与 WebHostBuilder、DI、Loggin 等的统一体验。
但看起来这种方法仅适用于长时间运行的后台服务。它将一直启动并一直保持到外部终止事件(如 Ctrl-C)。
有没有办法从内部结束这种类型的应用程序?
小智 22
您可以IHostApplicationLifetime用来停止应用程序的运行,您可以从构造函数和调用StopApplication()方法访问它。
IHostApplicationLifetime _lifeTime;
public MyClass(IHostApplicationLifetime lifeTime)
{
_lifeTime = lifeTime;
}
Run Code Online (Sandbox Code Playgroud)
然后停止应用程序()
public void Exit()
{
_lifeTime.StopApplication();
}
Run Code Online (Sandbox Code Playgroud)
编辑使用IHostApplicationLifetimeasIApplicationLifetime已弃用。
小智 5
即使您使用HostBuilder注册应用程序中的所有依赖项,您也不必使用IHost来执行 cmd 行应用程序。您可以通过创建服务范围来执行您的应用程序,如下所示:
var hostbuilder = new HostBuilder();
builder.ConfigureServices(ConfigureServices); //Configure all services for your application here
var host = hostbuilder.Build();
using (var scope = host.Services.CreateScope())
{
var myAppService = scope.ServiceProvider.GetRequiredService<IMyAppServiceToRun>(); //Use IHost DI container to obtain instance of service to run & resolve all dependencies
await myAppService.StartAsync(); // Execute your task here
}
using (host)
host.StopAsync();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9909 次 |
| 最近记录: |