Comment implémenter DI dans WebAPI à l'aide de NInject

L'injection de dépendances est un modèle de conception logicielle qui vous aide à créer des implémentations enfichables dans votre application à l'aide de composants testables faiblement couplés. Il élimine les dépendances codées en dur entre les types et facilite la création, le test et la maintenance de vos types au fil du temps. Le modèle de conception IOC (Inversion of Control) stipule que les objets ne doivent pas créer d'objets dont ils dépendent pour effectuer une activité.

Vous disposez de nombreux conteneurs IOC qui vous aident dans l'instanciation automatique et la gestion du cycle de vie des objets. Notez que l'injection de dépendances est un sous-ensemble du principe IOC. Les conteneurs IOC exploitent l'injection de dépendances pour inverser le flux de contrôle.

Commencer

Pour démarrer avec cette implémentation, créez un nouveau projet WebAPI dans Visual Studio. Ensuite, installez les packages nécessaires à partir de NuGet pour travailler avec NInject. Vous pouvez installer le package Ninject.Web.WebApi.WebHost via le gestionnaire de packages NuGet. Cela installerait à son tour les deux packages suivants pour vous.

Ninject.Web.WebApi

Ninject.Web.WebApi.WebHost

Injection de dépendances à l'aide de NInject

Une fois le package Ninject.Web.WebApi.WebHost installé avec succès, le fichier NInject.WebCommon.cs est automatiquement créé dans le dossier App_Start de votre projet. Il y aurait beaucoup de code standard généré - il suffit de l'ignorer et de se référer à la méthode RegisterServices (). À première vue, voici à quoi ressemblerait cette méthode.

private static void RegisterServices(IKernel kernel)

{

}

Vous devrez écrire votre code dans la méthode RegisterServices pour enregistrer les services ou injecter les dépendances. Nous y reviendrons plus tard dans cet article.

Dans cet exemple, nous utiliserons l'injection de constructeur - un type d'injection de dépendances dans lequel une ou plusieurs dépendances sont injectées via des constructeurs. Les deux autres types d'injection de dépendances comprennent: l'injection de setter et l'injection d'interface. J'ai couvert cela en détail dans l'un de mes messages précédents.

À l'étape suivante, créez un nouveau contrôleur nommé AuthorsController pour le projet WebAPI que vous avez créé. Remplacez le code par défaut de AuthorsController par celui donné ci-dessous.

public class AuthorsController : ApiController

    {

        private readonly IAuthorRepository repository;

        public AuthorsController(IAuthorRepository repository)

        {

            this.repository = repository;

        }

        public List Get()

        {

            return repository.GetAllAuthors();

        }

    }

Le AuthorsController contient une référence en lecture seule à l'interface IAuthorRepository, un constructeur d'argument et une méthode d'action Get. Notez que le AuthorsController utilise un constructeur pour injecter la dépendance, c'est-à-dire qu'il s'agit d'un constructeur d'arguments qui accepte une référence à l'interface IAuthorRepository comme paramètre. L'interface IAuthorRepository est implémentée par la classe AuthorRepository. Voici à quoi ressemble l'interface IAuthorRepository.

public interface IAuthorRepository

    {

        List GetAllAuthors();

    }

La méthode GetAllAuthors () est utilisée pour renvoyer une liste d'auteurs. Les noms des auteurs sont codés en dur. La classe AuthorRepository implémente la méthode GetAllAuthors comme indiqué ci-dessous.

public class AuthorRepository : IAuthorRepository

    {

        public List GetAllAuthors()

        {

            List authors = new List();

            authors.Add("Joydip");

            authors.Add("Pete");

            authors.Add("Steve");

            return authors;

        }

    }

Enregistrer nos services avec Ninject

Cette étape est assez simple. Rappelez-vous que nous avons discuté de la méthode RegisterServices plus tôt? Cela appartient à la classe statique NinjectWebCommon dans le fichier NinjectWebCommon.cs. Voici comment vous pouvez utiliser la méthode RegisterServices pour résoudre les dépendances.

private static void RegisterServices(IKernel kernel)

{

   kernel.Bind().To();   

Et c'est tout ce que vous devez faire. Si vous voyez des erreurs d'exécution liées à NInject, cela peut être dû à ActivationException. Pour résoudre ce problème, vous devez installer la dernière version du package Ninject.Web.WebApi. Mettez simplement à niveau Ninject.Web.WebApi à nouveau, recompilez et exécutez à nouveau votre application.

Vous pouvez consulter cet article pour plus d'informations sur la façon dont nous pouvons utiliser NInject avec WebAPI.