Définitions
L'inversion de contrôle est un paradigme de conception dans le but de réduire la connaissance des implémentations concrètes à partir du code du framework d'application et de donner un contrôle accru aux composants de votre application spécifiques à un domaine. Dans un système traditionnel conçu de haut en bas, le flux logique de l'application et la prise en compte de la dépendance vont des composants principaux, les premiers conçus aux derniers. En tant que telle, l'inversion de contrôle est un renversement presque littéral du contrôle et de la prise en compte de la dépendance dans une application.
L'injection de dépendance est un modèle utilisé pour créer des instances de classes sur lesquelles d'autres classes s'appuient sans savoir au moment de la compilation quelle implémentation sera utilisée pour fournir cette fonctionnalité.
Travailler ensemble
L'inversion de contrôle peut utiliser l'injection de dépendance car un mécanisme est nécessaire pour créer les composants fournissant la fonctionnalité spécifique. D'autres options existent et sont utilisées, par exemple des activateurs, des méthodes de fabrique, etc., mais les frameworks n'ont pas besoin de référencer ces classes d'utilitaires lorsque celles-ci peuvent accepter la ou les dépendances dont ils ont besoin.
Exemples
Un exemple de ces concepts à l'œuvre est le framework de plug-in dans Reflector . Les plug-ins ont beaucoup de contrôle sur le système même si l'application ne connaissait rien des plug-ins au moment de la compilation. Une seule méthode est appelée sur chacun de ces plug-ins, Initialize si memory serve, qui passe le contrôle au plug-in. Le cadre ne sait pas ce qu’ils vont faire, il leur permet simplement de le faire. Le contrôle a été pris à partir de l'application principale et attribué au composant effectuant le travail spécifique; inversion de contrôle.
La structure d’application permet l’accès à ses fonctionnalités via différents fournisseurs de services. Un plug-in est référencé aux fournisseurs de services lors de sa création. Ces dépendances permettent au plug-in d'ajouter ses propres éléments de menu, de modifier le mode d'affichage des fichiers, d'afficher ses propres informations dans les panneaux appropriés, etc. Étant donné que les dépendances sont transmises par interface, les implémentations peuvent changer et les modifications ne rompront pas la code tant que le contrat reste intact.
À l'époque, une méthode d'usine était utilisée pour créer les plug-ins à l'aide des informations de configuration, de la réflexion et de l'objet Activator (au moins dans .NET). Aujourd'hui, il existe des outils, MEF pour un, qui permettent un plus grand nombre d'options d'injection de dépendances, notamment la possibilité pour un framework d'application d'accepter une liste de plugins en tant que dépendance.
Sommaire
Bien que ces concepts puissent être utilisés et apportent des avantages indépendants, ils permettent d’écrire du code beaucoup plus souple, réutilisable et testable. En tant que tels, ils constituent des concepts importants dans la conception de solutions orientées objet.