Il est parfois nécessaire d'utiliser l'injection de dépendance pour fournir les paramètres à utiliser dans le constructeur. C'est quelque chose qui est pris en charge dans Unity (et d'autres conteneurs d'injection de dépendance), de sorte que lorsqu'il essaie de créer une instance du type, il peut fournir vos arguments en tant que paramètres dans le constructeur.Passage des paramètres du constructeur lors de la résolution des types dans Unity: Meilleure pratique
Ma question est la suivante: cette approche est-elle souhaitable?
Au sein d'une interface, il est impossible de spécifier quels paramètres une classe d'exécution doit avoir. En spécifiant les paramètres à Unity, vous supposez que la classe d'implémentation possède ces paramètres et vous placez des contraintes implicites sur les futures classes d'implémentation. Ces contraintes ne peuvent pas être communiquées via l'interface.
Alors, est-ce est défaut dans la façon dont s'interfaces sont spécifiées (.NET), par exemple. devrait-il être possible de spécifier des signatures de constructeur? Ou est-ce que cette fonctionnalité (d'être capable de fournir des paramètres constructeurs) a été incluse dans Unity en raison d'un autre besoin?
La seule véritable approche réaliste (me) semble utiliser une usine pour créer les classes de mise en œuvre, et faire l'injection de dépendance à l'usine.
J'apprécie ma question ici peut-être pas clair, alors je vais demander un peu différemment: quelle est la meilleure façon de faire l'injection de dépendance à l'égard d'une classe qui a un constructeur exigeant des paramètres?
(je ne crois pas que cette question est subjective, car il devrait probablement être un modèle de conception unique pour ce type d'injection de dépendance.)
EDIT:
Je dois ajouter que mon principal problème est que je peux créer une nouvelle classe d'implémentation qui a des paramètres constructeurs supplémentaires (où les paramètres du constructeur ne sont pas des choses qui peuvent être créées par l'unité).
Mais lorsque le constructeur nécessite des variables d'instance, je dois les fournir à Unity moi-même. Mais l'interface ne spécifie pas que j'ai besoin de ces paramètres, et si je crée une implémentation concrète de l'interface qui a des paramètres supplémentaires dans le constructeur? –