2016-02-07 14 views

risposta

23

In ASP.NET core è possibile registrarsi per i gettoni di cancellazione forniti da IApplicationLifetime

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

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

IApplicationLifetime è anche esporre i token di annullamento per ApplicationStopped e ApplicationStarted così come un metodo StopApplication() per arrestare l'applicazione.

+0

E 'questo dovrebbe funzionare su tutti i sistemi operativi e server? Non sono stato in grado di farlo funzionare su OSX + Kestrel. – opiethehokie

+0

Dovrebbe funzionare su tutte le piattaforme, altrimenti potrebbe essere un bug. Ci sono alcuni vecchi problemi su github, forse provi la soluzione alternativa di davidfowl in https://github.com/aspnet/Hosting/issues/151 altrimenti prova ad aprire un problema su https://github.com/aspnet/Hosting/issues potrebbe essere un bug, è ancora in RC1 in preparazione per RC2 – Tseng

+0

@opiethehokie: potrebbe anche essere correlato a https://github.com/aspnet/Hosting/issues/516. È per Linux, ma SIGINT e SIGTERM sono utilizzati anche su MacOS per quanto ne so. Non abbastanza familiare da sapere quale dei segnali inviati da MacOS per fermare il processo. Potrebbe anche essere interessante sapere se si sta utilizzando dnx core 1.0 o contro il framework mono completo – Tseng

9

In aggiunta alla risposta originale, ho avuto un errore durante il tentativo di collegare IApplicationLifetime all'interno del costruttore.

ho risolto questo facendo:

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

Questo funziona senza usare una classe di avvio quando si configura manualmente il proprio webhost dal main. –

Problemi correlati