alternative pour System.Web.Hosting.HostingEnvironment.RegisterObject dans asp.net core 2.0

J’ai une application héritée où HostingEnivronment.RegisterObject est utilisé.

J’ai été chargé de convertir cela en asp.net core 2.0. Cependant, je suis incapable de trouver un moyen d’implémenter ceci ou de trouver une alternative à cela dans asp.net core 2.0.

L’espace de noms Microsoft.AspNetCore.Hosting.Internal ne contient pas la méthode registerobject ni l’interface IRegisteredObject. Je ne sais pas comment mettre cela en œuvre.

Pour atteindre le même objective dans asp.net, vous pouvez utiliser l’interface IApplicationLifetime . Il a deux propriétés deux CancellationToken s,

ApplicationStopping :

L’hôte effectue un arrêt en douceur. Les demandes peuvent encore être en cours de traitement. L’arrêt est bloqué jusqu’à la fin de cet événement.

Et ApplicationStopped :

L’hôte est en train de terminer un arrêt gracieux. Toutes les demandes doivent être complètement traitées. L’arrêt est bloqué jusqu’à la fin de cet événement.

Cette interface est par défaut enregistrée dans un conteneur, vous pouvez donc simplement l’injecter où vous le souhaitez. Où vous avez précédemment appelé RegisterObject , vous appelez plutôt

 // or ApplicationStopped var token = lifeTime.ApplicationStopping.Register(OnApplicationStopping); private void OnApplicationStopping() { // will be executed on host shutting down } 

Et votre rappel OnApplicationStopping sera OnApplicationStopping par le runtime lors de l’arrêt de l’hôte. Si vous appeliez précédemment UnregisterObject , vous venez de disposer du jeton renvoyé par CancellationToken.Register :

 token.Dispose(); 

Vous pouvez également transmettre ces jetons d’annulation aux opérations qui attendent des jetons d’annulation et qui ne doivent pas être interrompues accidentellement par un arrêt.