[C#] Injection de dépendances

C’est un sujet assez populaire dans le monde du .NET. Une pratique de développement de plus en plus utilisée par les équipes de développement.

Nous allons voir ici de quoi il s’agit, et les erreurs à éviter dans l’implémentation d’injection de dépendances.

Définition

Une injection de dépendance est un pattern qui fait parti de ce que l’on appelle les IoC (Inversion Of Control) Containers. En .NET on en retrouve plusieurs parmis les plus connus : Spring.NET, Unity, Ninject… L’un ou plusieurs de ces noms doivent vous dire quelque chose 🙂

A savoir toutefois :

  • Vous pouvez effectuer une injection de dépendances sans avoir besoin d’un IoC container ou d’un outil externe.
  • Vous pouvez utiliser un IoC container sans faire d’injection de dépendance et, en fait, c’est une pratique extrêmement courante (qui n’est pas la plus top).

Partons d’un exemple de code et implémentation simple :

public class CustomerService : ICustomerService
{
private readonly CustomerRepository _customerRepository;

public CustomerService ()
{
_customerRepository = new CustomerRepository();
}

public Customer GetCustomerById(int id)
{
return _customerRepository.GetCustomerById(id);
}
}

Dans ce cas présent, notre service « CustomerService » est fortement dépendant du repository « CustomerRepository ». Il en a effet besoin pour requêter la liste des clients et en récupérer un en particulier.

Comment dans ce cas utiliser l’injection de dépendances pour éviter ce fort couplage ? On va utiliser une interface qui va servir de contrat pour le repository « CusomerRepository » :

public interface ICustomerRepository
{
Customer GetCustomerById(int id);
}

public class CustomerService : ICustomerService
{
private readonly ICustomerRepository _customerRepository;

public CustomerService (ICustomerRepository customerRepository)
{
_customerRepository = customerRepository;
}

public Customer GetCustomerById(int id)
{
return _customerRepository.GetCustomerById(id);
}
}

Et c’est ainsi fait ! En interfaçant ainsi notre repository, on découple ce lien entre notre service Customer et le Repository.

Il nous faut ensuite, via l’utilisation d’un des containers vus plus haut, configurer le mapping (Interfaces et implémentations) de nos injections de dépendances. Prenons ici l’exemple avec Unity :

private static IUnityContainer BuildUnityContainer()
{
var container = new UnityContainer();

container.RegisterType(typeof (ICustomerRepository), typeof (CustomerRepository));

return container;
}

A noter : ce mapping peut aussi bien se faire dans un app.config ou web.config. Ici nous l’avons fait directement en dur dans le code. Il peut être judicieux, pour des questions d’évolutivité, de placer ce mapping dans des fichiers de configuration !

Lien intéressant sur le sujet : https://www.martinfowler.com/articles/injection.html

Partagez:

[WCF] Entity Framework et service WCF consommé par Windows Phone

Dans cet article, je vais faire une introduction à WCF (Windows Communication Foundation), ainsi que l’utilisation que l’on peut en faire. Plus particulièrement, comment consommer un même service par plusieurs applications clientes ? (WPF, Windows Phone etc.)

Le code source de la solution est disponible en fin d’article.

Présentation

Comme présenté sur l’article Wikipédia, WCF est présent depuis la version 3.0 du Framework .NET. C’est une couche d’abstraction qui unifie et simplifie la mécanique d’intégration des services Web.

Etude de cas

Je suis un étudiant au lycée, et je souhaite, via une application, connaitre les détails d’une salle via son numéro.

Par exemple, dans la salle « C2125 » quel professeur fait cours, sur quelle matière? Et avec quels élèves serais-je ?

De ces besoins, déduisons-en une application à développer :

  • Base de données SQL Server (contenant la liste des élèves/professeurs leurs matières respectives) ;
  • Application Windows Phone, pour les étudiants voulant avoir les détails d’une salle ;
  • Service WCF, lié à la couche de données qui permettra d’être consommée à la fois par le client Windows Phone, mais aussi pour d’autres comme Silverlight ou WPF.

Voici les différentes étapes que nous allons suivre pour mener à bien cette étude de cas :

  1. Définition de la base de données
  2. Création du service WCF & implémentation EDMX
  3. Création du projet Windows Phone 7.1

  Continuer la lecture de [WCF] Entity Framework et service WCF consommé par Windows Phone

Partagez:

Créer une application WPF avec MVVM

Pour commencer cet article, je vais faire une brève présentation du design pattern MVVM (Model View ViewModel) :

C’est une méthode d’architecture logicielle qui est une variation du design pattern MVC (Model View Controller), consistant à séparer les différentes couches entre développeur et designer. Le terme designer sera ici la personne plutôt chargée de l’aspect graphique et de la réalisation de l’interface utilisateur (au sein du XAML via des outils comme Expression Blend).
Les différentes parties étant bien distinctes, cela facilitera le travail en équipe sur un même projet. Surtout si l’on travaille avec TFS et que plusieurs personnes ont besoin de passer en checkout un fichier pour le modifier, ca risque de coincer 🙂

Schématisons ces différentes parties

Exemple de création d’une application WPF simple se basant sur MVVM

Continuer la lecture de Créer une application WPF avec MVVM

Partagez:

Architecture applicative .NET

Application Architecture for .NETBien que pas très récent, ce guide donne les orientations pour l’architecture et le design des applications .NET et les services. Il se concentre sur les fonctionnalités de partitionnement application en composants, leurs caractéristiques de conception clés, explique comment la sécurité fonctionne, la gestion et la communication applicables à chaque couche, et fournit des informations sur la façon dont les composants doivent être déployés. (166 pages) :

A télécharger ici

Pour voir le site CodePlex : http://apparch.codeplex.com

Partagez: