12
votes

Résoudre les dépendances circulaires avec injection de dépendance

J'ai vu plusieurs articles sur divers sites Web proposant de résoudre des dépendances circulaires entre les assemblages .NET en utilisant une injection de dépendance. Cela peut résoudre les erreurs de construction, mais cela ne résolvait pas vraiment la dépendance circulaire, n'est-ce pas? Pour moi, il semble toujours être une erreur logique dans l'architecture. Suis-je fou ou que d'autres sont d'accord?

  1. Il s'agit d'une utilisation moins que stellaire de DI?
  2. pas le moyen approprié de résoudre des problèmes de dépendance circulaire?

1 commentaires

Bien que en général, une refonte soit faite, voici une référence: Stackoverflow.com/Questtions/1316518/...


4 Réponses :


3
votes

di n'est pas pour la résolution de la dépendance circulaire, mais plutôt pour faciliter la création de composants bien découplés et donc plus testables.


0 commentaires

34
votes

Si vous avez des dépendances circulaires entre deux objets, cela signifie que vous avez besoin d'un troisième objet sur lequel les deux objets dépendront, de sorte qu'ils ne dépendent pas l'un de l'autre. Voici un article qui est la solution exacte à votre problème:

http: // Misko .Heutry.com / 2008/08/01 / Dépendance circulaire-in-constructeurs-and-dépendance-injection /


1 commentaires

+1 Great Link - Cet article l'explique vraiment bien!



8
votes
  1. Oui, vous le rendez encore plus difficile à les détecter en utilisant une couche supplémentaire d'abstraction.
  2. Vous ne résolvez absolument pas la dépendance circulaire, mais cachez-la en ajoutant une couche d'abstraction supplémentaire, à l'aide de la bornisation tardive ou / et de l'accoupler de manière vague.

    La même réponse retourne dans les messages suivants (que je vais ajouter des références) qui est Créer une 3ème classe sur laquelle dépendez les deux . Cela se traduit par: Vous êtes violer le principe de responsabilité unique . En déplaçant (extraire) la responsabilité des deux classes dépendent d'une classe distincte, vous supprimerez la dépendance circulaire.

    FYI le Responsabilité unique sur Wikipedia

    Stackoverflow Discussions par d'autres:


0 commentaires

1
votes

Je vais lancer dans ma 0,02 $ ici depuis que j'ai trouvé cet article utile en recherchant "Suppression de dépendances cycliques"

Oui. Vous pouvez utiliser DI pour résoudre des dépendances circulaires. La première étape pour résoudre tout problème est de le trouver. NInject se plaint de ma dépendance circulaire et a jeté une exception utile à la bootstrémateuse. Ninject trouvé pour moi et me forçait à le réparer. Je pourrais tricher et utiliser une injection de propriété ou une injection de méthode, mais cela rompt ma protection des invariants de classe (qui est je pense ce que vous vous plaintenez).

Ainsi, un vote pour l'injection de la CTOR via IOC parce qu'il comportera des dépendances circulaires pour vous. Il vous appartient alors de refacteur et de retirer le bogue architectural.


1 commentaires

Très bon post concernant ceci: DotNetCoreTorials.com/2020 / 09/14 / ...