2016-02-07 59 views

回答

23

在ASP.NET核心可以通过IApplicationLifetime

public class Startup 
{ 
    public void Configure(IApplicationBuilder app, IApplicationLifetime applicationLifetime) 
    { 
     applicationLifetime.ApplicationStopping.Register(OnShutdown); 
    } 

    private void OnShutdown() 
    { 
     // Do your cleanup here 
    } 
} 

IApplicationLifetime所提供的取消标记寄存器也被暴露取消标记为ApplicationStoppedApplicationStarted以及一个StopApplication()方法来停止该应用程序。

+0

难道这所有的操作系​​统和服务器一起工作:

我这样做解决了这个?我一直无法在OSX + Kestrel上工作。 – opiethehokie

+0

它应该可以在所有平台上工作,否则它可能是一个错误。 github上有一些旧问题,也许你可以在https://github.com/aspnet/Hosting/issues/151上尝试davidfowl的解决方法,否则请尝试在https://github.com/aspnet/Hosting/issues处打开一个问题。一个错误,它仍然在RC1准备RC2 – Tseng

+0

@opiethehokie:也可能与https://github.com/aspnet/Hosting/issues/516有关。它是用于linux的,但据我所知,在MacOS上也使用了SIGINT和SIGTERM。对于知道MacOS发送哪些信号来停止该过程不够熟悉。也许有趣的知道,如果你使用的是dnx核心1.0或全单声道框架 – Tseng

9

除了原来的答案,我试图在构造函数中连接IApplicationLifetime时出错。

public class Startup 
{ 
    public void Configure(IApplicationBuilder app) 
    { 
     var applicationLifetime = app.ApplicationServices.GetRequiredService<IApplicationLifetime>(); 
     applicationLifetime.ApplicationStopping.Register(OnShutdown); 
    } 

    private void OnShutdown() 
    { 
     // Do your cleanup here 
    } 
} 
+1

当您从main手动配置虚拟主机时,这种方式没有使用启动类。 –

相关问题