J'ai lu les articles sur MSDN sur Unity (Dependency Injection, Inversion of Control), mais je pense que j'en ai besoin d'expliquer en termes simples (ou des exemples simples). Je suis familier avec le modèle MVPC (nous l'utilisons ici), mais je ne peux pas encore vraiment comprendre ce truc Unity, et je pense que c'est la prochaine étape dans la conception de notre application.
157
Réponses:
Unity n'est qu'un "conteneur" IoC. Google StructureMap et essayez-le à la place. Un peu plus facile à grok, je pense, quand les trucs IoC sont nouveaux pour vous.
Fondamentalement, si vous comprenez l'IoC, vous comprenez que ce que vous faites est d'inverser le contrôle lorsqu'un objet est créé.
Sans IoC:
Avec conteneur IoC:
Sans IoC, votre classe qui repose sur IMyService doit renouveler une version concrète du service à utiliser. Et c'est mauvais pour plusieurs raisons (vous avez couplé votre classe à une version concrète spécifique de IMyService, vous ne pouvez pas le tester facilement, vous ne pouvez pas le changer facilement, etc.)
Avec un conteneur IoC, vous «configurez» le conteneur pour résoudre ces dépendances pour vous. Donc, avec un schéma d'injection basé sur un constructeur, vous passez simplement l'interface à la dépendance IMyService dans le constructeur. Lorsque vous créez la MyClass avec votre conteneur, votre conteneur résoudra la dépendance IMyService pour vous.
À l'aide de StructureMap, la configuration du conteneur ressemble à ceci:
Donc, ce que vous avez fait, c'est dire au conteneur: "Quand quelqu'un demande IMyService, donnez-lui une copie de SomeConcreteService." Et vous avez également précisé que lorsque quelqu'un demande une MyClass, il obtient une MyClass concrète.
C'est tout ce qu'un conteneur IoC fait vraiment. Ils peuvent faire plus, mais c'est l'essentiel - ils résolvent les dépendances pour vous, vous n'avez donc pas à le faire (et vous n'avez pas à utiliser le mot-clé "new" dans tout votre code).
Dernière étape: lorsque vous créez votre MyClass, vous procédez comme suit:
J'espère que cela pourra aider. N'hésitez pas à m'envoyer un e-mail.
la source
Je viens de regarder le screencast IoC d'injection de dépendance Unity de 30 minutes de David Hayden et j'ai pensé que c'était une bonne explication avec des exemples. Voici un extrait des notes de l'émission:
La capture d'écran montre plusieurs utilisations courantes de Unity IoC, telles que:
la source
Unity est une bibliothèque comme beaucoup d'autres qui vous permet d'obtenir une instance d'un type demandé sans avoir à la créer vous-même. Alors donné.
Vous utiliseriez une bibliothèque comme Unity pour enregistrer la calculatrice à renvoyer lorsque le type ICalculator est demandé aka IoC (Inversion of Control) (cet exemple est théorique, pas techniquement correct).
Alors maintenant, quand vous voulez une instance d'un ICalculator, vous venez de ...
Les bibliothèques IoC peuvent généralement être configurées pour contenir un singleton ou créer une nouvelle instance chaque fois que vous résolvez un type.
Maintenant, disons que vous avez une classe qui repose sur un ICalculator pour être présent que vous pourriez avoir.
Et vous pouvez configurer la bibliothèque pour injecter un objet dans le constructeur lors de sa création.
Ainsi, DI ou injection de dépendances signifie injecter tout objet dont un autre pourrait avoir besoin.
la source
Ce gars WilcoxTutorials donne une excellente démonstration du conteneur Unity qui s'adresse aux débutants.
Partie 1: http://www.youtube.com/watch?v=CWwe9Z0Gyew
Partie 2: http://www.youtube.com/watch?v=PsIbevgzQQE
En moins d'une demi-heure et vous comprendrez les bases!
la source
Unity est un IoC. Le but d'IoC est d'abstraire le câblage des dépendances entre les types en dehors des types eux-mêmes. Cela présente quelques avantages. Tout d'abord, cela se fait de manière centralisée, ce qui signifie que vous n'avez pas à changer beaucoup de code lorsque les dépendances changent (ce qui peut être le cas pour les tests unitaires).
De plus, si le câblage est effectué à l'aide de données de configuration au lieu de code, vous pouvez en fait recâbler les dépendances après le déploiement et ainsi modifier le comportement de l'application sans changer le code.
la source
MSDN a un guide du développeur sur l'injection de dépendances à l'aide de Unity qui peut être utile.
Le Guide du développeur commence par les bases de ce qu'est l'injection de dépendances et continue avec des exemples d'utilisation d'Unity pour l'injection de dépendances. Depuis février 2014, le Guide du développeur couvre Unity 3.0, qui a été publié en avril 2013.
la source
Je couvre la plupart des exemples d'injection de dépendances dans l'API Web ASP.NET 2
Dans DIAutoV2Controller.cs, le mécanisme d'injection automatique est utilisé
Dans DIV2Controller.cs, tout sera injecté à partir de la classe Dependency Configuration Resolver
Configuration du résolveur de dépendances
la source