2017-12-18 5 views
3

Ich habe eine Legacy-Anwendung, wo HostingEnivronment.RegisterObject verwendet wird.Alternative für System.Web.Hosting.HostingEnvironment.RegisterObject in asp.net Core 2.0

Ich wurde damit beauftragt, dies zu asp.net Core 2.0 zu konvertieren. Ich bin jedoch nicht in der Lage, einen Weg zu finden, dies entweder zu implementieren oder eine Alternative dazu in asp.net Core 2.0 zu finden.

Der Namespace Microsoft.AspNetCore.Hosting.Internal enthält weder die Methode registerobject noch die IRegisteredObject-Schnittstelle. Ich weiß nicht, wie ich das umsetzen soll.

Antwort

1

Der Weg zur Erreichung ähnlicher Ziel in asp.net Kern ist die Verwendung IApplicationLifetime Schnittstelle. Es verfügt über zwei Eigenschaften zwei CancellationToken s,

ApplicationStopping:

Gastgeber ein ordnungsgemäßes Herunterfahren durchführt. Anfragen können immer noch Verarbeitung sein. Shutdown Blöcke bis dieses Ereignis abgeschlossen ist.

Und ApplicationStopped:

Gastgeber ein ordnungsgemäßes Herunterfahren abgeschlossen wird. Alle Anfragen sollten vollständig verarbeitet werden. Shutdown Blöcke bis dieses Ereignis abgeschlossen ist.

Diese Schnittstelle ist standardmäßig im Container registriert, sodass Sie sie einfach dorthin injizieren können, wo Sie sie benötigen. Wo man früher RegisterObject genannt, rufen Sie stattdessen

// or ApplicationStopped 
var token = lifeTime.ApplicationStopping.Register(OnApplicationStopping); 

private void OnApplicationStopping() { 
    // will be executed on host shutting down 
} 

Und Ihr OnApplicationStopping Rückruf wird von der Laufzeit auf dem Host-Shutdown aufgerufen werden. Wo Sie vorher UnregisterObject nennen würde, verfügen Sie nur Token zurück von CancellationToken.Register:

token.Dispose(); 

Sie können auch diese Stornierung Token-Operationen übergeben, die Löschung Token und welche erwarten sollten nicht versehentlich durch Abschaltung unterbrochen werden.

+0

ok lass mich das überprüfen –

Verwandte Themen