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? P>
4 Réponses :
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. P>
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: P>
+1 Great Link - Cet article l'explique vraiment bien!
La même réponse retourne dans les messages suivants (que je vais ajouter des références) qui est FYI le Responsabilité unique sur Wikipedia P>
Stackoverflow Discussions par d'autres: P>
Ma réponse sur Stackoverflow avec un exemple d'extraction la responsabilité dans une classe séparée. P>
Je vais lancer dans ma 0,02 $ ici depuis que j'ai trouvé cet article utile en recherchant "Suppression de dépendances cycliques" p>
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). P>
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. P>
Très bon post concernant ceci: DotNetCoreTorials.com/2020 / 09/14 / ...
Bien que en général, une refonte soit faite, voici une référence: Stackoverflow.com/Questtions/1316518/...