Comment utiliser Autofac dans ASP.Net Core

L'injection de dépendance facilite le couplage lâche et favorise la testabilité et la maintenance. ASP.Net Core fournit une prise en charge intégrée de l'injection de dépendances (une sorte d'inversion de contrôle) avec un conteneur d'injection de dépendances minimaliste. Cependant, le conteneur intégré ne dispose pas de nombreuses fonctionnalités d'une injection de dépendance à part entière ou d'une inversion de conteneur de contrôle.

Pour résoudre ce problème, vous pouvez utiliser des conteneurs tiers dans ASP.Net Core. En d'autres termes, vous pouvez facilement remplacer le conteneur intégré par un conteneur tiers. Autofac est une inversion de conteneur de contrôle qui peut être utilisée pour résoudre les dépendances. Cet article fournit une discussion sur la façon dont nous pouvons travailler avec Autofac dans ASP.Net Core.

Créer un projet ASP.Net Core dans Visual Studio

Commençons par créer un projet ASP.Net Core dans Visual Studio. En supposant que Visual Studio 2017 ou Visual Studio 2019 est installé sur votre système, suivez les étapes décrites ci-dessous pour créer un nouveau projet 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», 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 2.2 (ou version ultérieure) dans la liste déroulante en haut.
  8. Sélectionnez «Application Web» comme modèle de projet. 
  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 ASP.Net Core dans Visual Studio. Nous utiliserons ce projet dans les sections suivantes de cet article pour travailler avec Autofac.

Installez Autofac dans votre projet ASP.Net Core

Il est facile d'installer Autofac - vous pouvez l'installer à partir de NuGet. Au moment d'écrire ces lignes, la version actuelle d'Autofac est la 4.9.2. Pour travailler avec Autofac, vous devez également installer le package Autofac.Extensions.DependencyInjection. Cela garantira que vous disposez des dépendances nécessaires pour travailler avec Autofac.

Sélectionnez le projet d'application Web ASP.Net Core que vous avez créé ci-dessus, puis cliquez avec le bouton droit de la souris et installez Autofac.Extensions.DependencyInjection via le gestionnaire de package NuGet. Acceptez tous les accords de licence qui pourraient vous être demandés lors de l'installation. Vous pouvez également installer ce package en entrant la commande suivante dans la console NuGet Package Manager:

Install-Package Autofac.Extensions.DependencyInjection

Créez une classe dans votre application ASP.Net Core

Pour illustrer l'injection de dépendances, nous aurons besoin de quelques objets avec lesquels travailler. Considérez l'interface IAuthorRepository qui contient la déclaration de la méthode GetMessage ci-dessous.

 interface publique IAuthorRepository

    {

        string GetMessage ();

    }

La classe AuthorRepository implémente l'interface IAuthorRepository comme indiqué ci-dessous.

 public class AuthorRepository: IAuthorRepository

    {

        chaîne publique GetMessage ()

        {

            retourne "Hello World";

        }

    }

Notez qu'il s'agit d'une implémentation minimaliste d'un référentiel - c'est-à-dire qu'il ne contient pas les méthodes CRUD qu'un référentiel typique contient. Je vous laisse le soin de mettre en œuvre les méthodes CRUD de manière appropriée.

Configurer Autofac dans ASP.Net Core

Pour configurer Autofac, vous devez spécifier le code de configuration dans la méthode ConfigureServices de la classe Startup. Notez que la méthode ConfigureServices est utilisée pour ajouter des services au moment de l'exécution au conteneur.

La première étape consiste à créer un générateur de conteneur pour enregistrer les services nécessaires avec le conteneur Autofac. La première étape consiste à remplir les services de structure à l'aide de la méthode Populate comme indiqué ci-dessous.

var containerBuilder = new ContainerBuilder ();

containerBuilder.Populate (services);

L'étape suivante consiste à enregistrer les services personnalisés avec Autofac. Pour ce faire, utilisez la méthode RegisterType sur l'instance de générateur de conteneur comme indiqué ci-dessous.

containerBuilder.RegisterType (). As ();

Pour créer le conteneur, écrivez le code suivant.

var container = containerBuilder.Build ();

return container.Resolve ();

Voici le code source complet de la méthode ConfigureServices pour votre référence:

public IServiceProvider ConfigureServices (services IServiceCollection)

   {

       services.AddMvc ();

       var containerBuilder = new ContainerBuilder ();

       containerBuilder.Populate (services);

       containerBuilder.RegisterType ().

       Comme();

       var container = containerBuilder.Build ();

       return container.Resolve ();

   }

Utilisez Autofac dans vos contrôleurs dans ASP.Net Core

Maintenant qu'Autofac a été installé et configuré dans votre projet, vous pouvez commencer à l'utiliser dans vos contrôleurs. L'extrait de code suivant montre comment vous pouvez résoudre les dépendances dans ValuesController.

  public class ValuesController: ControllerBase

  {

        private IAuthorRepository _authorRepository; 

        public ValuesController (IAuthorRepository authorRepository) 

        {

            _authorRepository = authorRepository;

        } // GET api / values

        [HttpGet]

        public ActionResult Get ()

        {

            return _authorRepository.GetMessage ();

        }

     // Autres méthodes d'action

  }

Le principe d'injection de dépendance est une réalisation de l'inversion du principe de contrôle. C'est une technique utilisée pour supprimer les dépendances de l'implémentation en vous permettant d'injecter ces dépendances en externe. L'inversion des conteneurs de contrôle tels qu'Autofac tire parti de l'injection de dépendances pour inverser le flux de contrôle et aider à automatiser l'instanciation et la gestion du cycle de vie des objets.

L'injection de dépendances prend trois formes: l'injection de constructeur, l'injection d'interface et l'injection de propriété. Dans cet exemple, nous avons utilisé l'injection de constructeur pour injecter une dépendance - à savoir une instance de type AuthorRepository - au moment de l'exécution dans la classe ValuesController.

Nous avons vu comment Autofac peut être utilisé pour remplacer le conteneur d'injection de dépendances par défaut dans ASP.Net Core, mais nous n'avons fait qu'effleurer la surface de ses capacités. J'explorerai Autofac plus en profondeur dans les prochains articles ici.