Implémenter Ninject avec ASP.Net MVC 4 et WebApi

Si vous utilisez un projet basé sur ASP.Net MVC et qui utilise également une ASP.Net WebApi, il est nécessaire de prévoir quelques petits développements afin de faire fonctionner Ninject.

aspnet

Les packages NuGet présents au 28 janvier 2013 sur le web ne permettent pas de s’en sortir simplement. Je trouve même qu’ils sortent la grosse artillerie pour finalement ne fonctionner qu’avec WebApi ou seulement avec MVC.

Le package Ninject WebApi date d’ailleurs de la RC de la WebApi et ne fonctionne pas sans une petite manipulation après son installation. Le package MVC semble fonctionner bien qu’ayant été mis à jour pour MVC3 pour la dernière fois.

Passons au code et commençons par créer un projet basé sur le template Web Api de Visual Studio 2012.

Télécharger les sources sur GitHub

Choix du template VS

Choix du template VS

Voyons ensuite comment créer de simples contrôleurs MVC et WebApi qui requièrent une injection de dépendance à la construction. Pour cela, on crée une classe User, une classe UserService qui implémente une interface IUserService, elle même demandant d’implémenter la méthode GetUsers();

Pour le contrôleur MVC, je vais ensuite simplement détourner l’implémentation du template de base pour retourner ma liste d’utilisateurs dans la vue index. Pas très propre, mais ce n’est pas le sujet 🙂

Le contrôleur MVC renvoyant la liste des utilisateurs

Le contrôleur MVC renvoyant la liste des utilisateurs

Pour le contrôleur de WebApi, je vais de la même manière refactoriser le « ValuesController » de base en UsersController

Le contrôleur de web api renvoyant la liste des utilisateurs

Le contrôleur de web api renvoyant la liste des utilisateurs

Et voilà, nos contrôleurs MVC et WebApi attendent avec impatience que le Dependency Resolver fasse son oeuvre!

Voici maintenant comment implémenter cela, après avoir référencé le package NuGet Ninject

ninjectmvcresolver

Le Dependency Resolver pour MVC

Le Dependency Scope pour Web Api

Le Dependency Scope pour Web Api

Le Dependency Resolver pour Web Api

Le Dependency Resolver pour Web Api

Enfin, il faut créer les appels dans le global.asax pour faire fonctionner tout cela:

Le global.asax qui fait fonctionner les DR

Le global.asax qui fait fonctionner les DR

Télécharger les sources sur GitHub

Advertisements

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s