Lisant la documentation de ASP.NET de Base, il existe deux méthodes sélectionnées pour le Démarrage: Configurer et ConfigureServices.
Aucune de ces semblait être un bon endroit pour mettre le code personnalisé que je voudrais lancer au démarrage. Peut-être que je veux ajouter un champ personnalisé à ma DB, si elle n'existe pas, vérifier un fichier spécifique, les semences des données dans ma base de données, etc. Le Code que je veux lancer une fois, juste à l'application de démarrage.
Est-il préféré/approche recommandée pour aller à ce sujet?
Réponses
Trop de publicités?Je suis d'accord avec l'OP.
Mon scénario est que je veux enregistrer un microservice avec un service de registre, mais n'ont aucun moyen de savoir ce que le point de terminaison est jusqu'à ce que le microservice est en cours d'exécution.
J'ai l'impression que les deux le Configurer et ConfigureServices méthodes ne sont pas l'idéal, car ni la ont été conçus pour effectuer ce type de traitement.
Un autre scénario serait vouloir se réchauffer les caches, ce qui est quelque chose que nous pourrions faire.
Il existe plusieurs alternatives pour la accepté de répondre:
Créer une autre application qui effectue les mises à jour à l'extérieur de votre site web, comme un outil de déploiement, qui applique les mises à jour de la base de données par programmation avant de commencer le site web
Dans votre Démarrage de classe, l'utilisation d'un constructeur statique pour s'assurer que le site est prêt à être lancé
Mise à jour
La meilleure chose à faire à mon avis est d'utiliser le IApplicationLifetime interface comme ceci:
public class Startup
{
public void Configure(IApplicationLifetime lifetime)
{
lifetime.ApplicationStarted.Register(OnApplicationStarted);
}
public void OnApplicationStarted()
{
// Carry out your initialisation.
}
}
Fondamentalement, il existe deux points d'entrée pour l'exemple de code personnalisé au moment du démarrage.
1.) Main
méthode
En tant que ASP.NET application de Base a eu la bonne vieille Main
méthode comme point d'entrée vous pouvez placer le code avant de l'ASP.NET Noyau de démarrage des trucs, comme
public class Program
{
public static void Main(string[] args)
{
// call custom startup logic here
AppInitializer.Startup();
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
}
2.) Utilisez votre Startup
classe
Comme vous l'avez déjà dit dans votre question, c'est l' Configure
et ConfigureServices
un bon endroit pour votre code personnalisé.
Je préfère l' Startup
classe. À partir de l'exécution point de vue, il n'a pas d'importance, si l'appel est appelée lors du démarrage ou quelque part d'autre avant de l' host.Run()
appel. Mais à partir d'un programmateur de point de vue qui est habitué à l'ASP.NET cadre puis son premier look pour une telle logique serait l' Startup.cs
le fichier. Tous les échantillons et les modèles d'y mettre la logique de l'Identité Entity Framework d'initialisation et ainsi de suite. Donc, en tant que convention, je vous recommande de placer l'initialisation choses là.