37 votes

Démarrage de l'Application du code dans ASP.NET de Base

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?

23voto

Bonner 웃 Points 1047

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.
    }
}

13voto

Ralf Bönning Points 8213

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à.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X