Comment utiliser le modèle d'options dans ASP.NET Core

Lorsque vous travaillez dans ASP.NET Core, vous spécifiez souvent les paramètres de votre application, les stockez dans un fichier, puis récupérez ces paramètres lorsque l'application en a besoin. En règle générale, vous enregistrez vos dépendances dans la méthode ConfigureServices de la classe Startup. Vous pouvez spécifier les paramètres de votre application dans le fichier appsettings.json ou dans un autre fichier .json, puis profiter de l'injection de dépendances via IOptions pour lire ces paramètres dans votre application.

Les modèles d'options offrent un moyen élégant d'ajouter des paramètres fortement typés à votre application ASP.NET Core. Le modèle d'options, qui est une extension au-dessus de l'interface IServiceCollection, tire parti des classes pour représenter un groupe de paramètres associés. Cet article décrit le modèle d'options, pourquoi il est utile et comment il peut être utilisé pour travailler avec des données de configuration dans ASP.NET Core.

Pour utiliser les exemples de code fournis dans cet article, vous devez disposer de Visual Studio 2019 installé sur votre système. Si vous n'en avez pas déjà une copie, vous pouvez télécharger Visual Studio 2019 ici.

Créer un projet d'API ASP.NET Core

Tout d'abord, créons un projet ASP.NET Core dans Visual Studio. En supposant que Visual Studio 2019 est installé sur votre système, suivez les étapes décrites ci-dessous pour créer un nouveau projet d'API ASP.NET Core dans Visual Studio.

  1. Lancez l'IDE de Visual Studio.
  2. Cliquez sur "Créer un nouveau projet".
  3. Dans la fenêtre «Créer un nouveau projet», sélectionnez «Application Web ASP.NET Core» dans la liste des modèles affichés.
  4. Cliquez sur Suivant.
  5. Dans la fenêtre «Configurer votre nouveau projet» ci-dessous, spécifiez le nom et l'emplacement du nouveau projet.
  6. Cliquez sur Créer.
  7. Dans la fenêtre «Créer une nouvelle application Web ASP.NET Core», sélectionnez .NET Core comme moteur d'exécution et ASP.NET Core 3.0 (ou version ultérieure) dans la liste déroulante en haut. J'utiliserai ASP.NET Core 3.1 ici.
  8. Sélectionnez «API» comme modèle de projet pour créer une nouvelle application API ASP.NET Core. 
  9. Assurez-vous que les cases à cocher «Activer le support Docker» et «Configurer pour HTTPS» ne sont pas cochées car nous n'utiliserons pas ces fonctionnalités ici.
  10. Assurez-vous que l'authentification est définie sur «Aucune authentification» car nous n'utiliserons pas non plus l'authentification.
  11. Cliquez sur Créer.

Cela créera un nouveau projet d'API ASP.NET Core dans Visual Studio. Sélectionnez le dossier de solution Contrôleurs dans la fenêtre Explorateur de solutions et cliquez sur «Ajouter -> Contrôleur…» pour créer un nouveau contrôleur nommé DefaultController. Nous utiliserons ce projet dans les sections suivantes de cet article.

Implémenter le modèle d'options dans ASP.NET Core

Pour utiliser le modèle d'options dans ASP.NET Core, vous avez besoin du package Microsoft.Extensions.Options.ConfigurationExtensions. Incidemment, les applications ASP.NET Core font implicitement référence au package Microsoft.Extensions.Options.ConfigurationExtensions par défaut.

Lors de l'utilisation du modèle d'options, vous souhaiterez généralement utiliser des classes pour représenter un groupe de paramètres associés. En isolant les paramètres de configuration dans des classes distinctes, votre application adhère aux principes suivants:

  • Séparation des préoccupations: Les paramètres utilisés dans les différents modules de l'application sont découplés les uns des autres. 
  • Principe de séparation des interfaces: les classes qui représentent ces paramètres dépendent uniquement des paramètres de configuration qu'elles utiliseraient. 

Maintenant, écrivez les paramètres suivants dans le fichier appsettings.json.

"DatabaseSettings": {

    "Serveur": "localhost",

    "Fournisseur": "SQL Server",

    "Base de données": "DemoDb",

    «Port»: 23,

    "UserName": "sa",

    "Mot de passe": "Joydip123"

  }

Notez que votre classe de configuration doit avoir des propriétés publiques get et set. Nous allons profiter de la classe suivante pour lire ces paramètres sous peu.

 DatabaseSettings de classe publique

    {

        chaîne publique Server {get; ensemble; }

        fournisseur de chaîne publique {get; ensemble; }

        chaîne publique Database {get; ensemble; }

        public int Port {get; ensemble; }

        chaîne publique UserName {get; ensemble; }

        public string Password {get; ensemble; }

    }

Vous pouvez maintenant utiliser la méthode d'extension Configure de IServiceCollection pour lier votre classe de paramètres à votre configuration, comme indiqué dans l'extrait de code ci-dessous.

public void ConfigureServices (services IServiceCollection)

{

   services.AddControllers ();

   services.Configurer

   (options => Configuration.GetSection ("DatabaseSettings"). Bind (options));

}

Lire les données de configuration dans le contrôleur dans ASP.NET Core

Nous allons maintenant profiter du DefaultController que nous avons créé précédemment pour montrer comment nous pouvons lire les données de configuration dans le contrôleur. L'interface IOptions expose une propriété Value qui peut être utilisée pour récupérer l'instance de la classe de paramètres.

L'extrait de code suivant montre comment vous pouvez utiliser la classe DatabaseSettings dans votre contrôleur nommé DefaultController. Notez comment l'injection de dépendances (injection de constructeur dans cet exemple) a été utilisée ici.

classe publique DefaultController: ControllerBase

{

   Private DatabaseSettings _settings;

   public DefaultController (paramètres IOptions)

   {

      _settings = settings.Value;

   }

   // Méthodes d'action

}

Appliquer des règles pour les configurations dans ASP.NET Core

Vous pouvez également appliquer certaines règles comme indiqué dans l'extrait de code ci-dessous. Notez comment une instance de la classe d'assistance pour SQL Server ou MySQL est ajoutée en tant que singleton ici.

services.Configurer (options =>

 {

     if (options.Provider.ToLower (). Trim (). Equals ("sqlserver"))

     {

        services.AddSingleton (nouveau SqlDbHelper ());

     }

     else if (options.Provider.ToLower (). Trim (). Equals ("mysql"))

     {

         services.AddSingleton (nouveau MySqlDbHelper ());

     }

 });

La prise en charge de la configuration fortement typée est une fonctionnalité intéressante d'ASP.NET Core qui vous permet d'appliquer la séparation des préoccupations et les principes de séparation des interfaces. Dans un prochain article sur le modèle d'options, je parlerai de la validation de la configuration et de la configuration rechargeable avec un accent particulier sur l'interface IOptionsMonitor. D'ici là, vous pouvez en savoir plus sur le modèle d'options dans la documentation en ligne de Microsoft ici. 

Comment faire plus dans ASP.NET et ASP.NET Core:

  • Comment utiliser la mise en cache en mémoire dans ASP.NET Core
  • Comment gérer les erreurs dans l'API Web ASP.NET
  • Comment passer plusieurs paramètres aux méthodes du contrôleur API Web
  • Comment consigner les métadonnées de demande et de réponse dans l'API Web ASP.NET
  • Comment travailler avec HttpModules dans ASP.NET
  • Contrôle de version avancé dans l'API Web ASP.NET Core
  • Comment utiliser l'injection de dépendances dans ASP.NET Core
  • Comment travailler avec des sessions dans ASP.NET
  • Comment travailler avec HTTPHandlers dans ASP.NET
  • Comment utiliser IHostedService dans ASP.NET Core
  • Comment consommer un service SOAP WCF dans ASP.NET Core
  • Comment améliorer les performances des applications ASP.NET Core
  • Comment consommer une API Web ASP.NET Core à l'aide de RestSharp
  • Comment travailler avec la journalisation dans ASP.NET Core
  • Comment utiliser MediatR dans ASP.NET Core
  • Comment travailler avec l'état de session dans ASP.NET Core
  • Comment utiliser Nancy dans ASP.NET Core
  • Comprendre la liaison de paramètres dans l'API Web ASP.NET
  • Comment télécharger des fichiers dans ASP.NET Core MVC
  • Comment implémenter la gestion globale des exceptions dans l'API Web ASP.NET Core
  • Comment implémenter les vérifications de l'état dans ASP.NET Core
  • Meilleures pratiques de mise en cache dans ASP.NET
  • Comment utiliser la messagerie Apache Kafka dans .NET
  • Comment activer CORS sur votre API Web
  • Quand utiliser WebClient vs HttpClient vs HttpWebRequest
  • Comment travailler avec Redis Cache dans .NET
  • Quand utiliser Task.WaitAll par rapport à Task.WhenAll dans .NET