2012-11-09 5 views
1

I ont une solution avec 3 projetsUne dépendance autour de la référence circulaire en C#?

Project1 - main application 
Project2 - graphing application 
Project3 - graphing library 

Les données sont accessibles à partir d'objets dans Project1. Projet 1 a une référence au projet 2 pour créer un affichage des données (formulaire), et projectg 2 a une référence au projet 3 pour faire la lourde tâche de rendre les graphiques.

Maintenant, le projet 3 doit avoir accès aux objets/méthodes du projet 1 car c'est là que les données sont conservées. Mais quand j'ajoute une référence du projet 3 au projet 1, j'obtiens une erreur à propos des références circulaires.

Comment puis-je résoudre ce problème?

Remerciez, Reza

+2

peut-être vous devriez restructurer votre architecture –

+0

@luis_laurent si j'avais eu connaissance de cette restriction, je ne l'aurais pas architecturé de cette façon. J'apprends toujours C#. Je me demande si la simple fusion de projets pourrait être plus simple .. – reza

+0

ok tant pis, je ne sais pas vraiment s'il y a une manière de résoudre ce problème, mais la seule façon dont je vois est de refactoriser vos projets. –

Répondre

7

Vous devez maintenir le flux dans un sens .. vers le bas.

Pour contourner cela, j'ai généralement un projet "Models". Les modèles de données sont stockés dans ce projet par eux-mêmes et ce projet est référencé par tout autre projet qui en a besoin.

3

Non; il n'y a aucun moyen de contourner cela. Vous avez une dépendance circulaire. Vous devrez refactoriser les couches de votre application.

Ce que je trouve fonctionne le mieux pour moi en termes de couches (du plus bas au plus élevé)

  1. Méthodes globales de configuration & (à savoir des choses comme des méthodes d'extension de type de base, les messages système, etc.).
  2. Couche d'accès aux données. Aucune logique métier seule la logique CRUD de données.
  3. Couche métier. Ajoutez une logique métier ici.
  4. Couche d'ajout de valeur d'interface utilisateur. C'est là que des choses comme vos bibliothèques graphiques iraient. (facultatif)
  5. Couche d'interface utilisateur. C'est ici que vous construisez l'interface utilisateur que l'utilisateur final voit.
2

Une façon de gérer les références circulaires consiste à restructurer votre application.

Créez le projet 4 et placez les interfaces communes aux projets. Vous pouvez inclure le projet 4 de tous les autres projets. Maintenant, implémentez les interfaces de ce projet dans l'un des trois autres projets, et utilisez les implémentations via un mécanisme d'usine quelconque (un conteneur d'inversion de contrôle est également bon, mais il peut être trop lourd pour des applications plus simples).