2009-05-29 8 views
0

S'il vous plaît d'abord lire le fil suivant:référence circulaire entre les Assemblées en C# et Visual Studio 2005 (Encore une fois ...)

Circular reference between Assemblies in C# and Visual Studio 2005

interfaces de mise en œuvre est de résoudre mon problème mais ne remplissant pas mon objectif.

Ma cible est de travailler uniquement avec la couche BO/l'assemblage à partir de la couche d'interface utilisateur/assemblage. Alors que je peux maintenir une référence propre couche-à-couche. Co12 Je ne veux pas qu'une référence soit ajoutée à la fois pour la couche BO/l'assemblage et la couche ORMapper/l'assemblage dans la couche/l'assemblage d'interface utilisateur. Je souhaite uniquement travailler avec la couche BO/l'assemblage à partir de la couche d'interface utilisateur/de l'assemblage. Pendant ce temps quelqu'un m'a suggéré cela, cela ne peut être possible qu'en utilisant Reflection, pas DI. Est-ce vrai?

Répondre

0

Si vous insistez vraiment pour masquer la couche ORM derrière votre couche BO, l'injection de dépendances devrait toujours pouvoir vous aider. Notez que vous ne serez pas en mesure de vous abstenir de référencer la bibliothèque de DI à partir de votre thread d'interface utilisateur, car ce sera là que vos objets métier proviendront.

Approche:

  • Créer une interface qui contient des méthodes pour charger les données pour remplir User objets
  • implémenter cette interface dans votre projet ORM
  • Au démarrage, inscrivez-vous la mise en œuvre ORM contre la interface utilisant un conteneur DI quelconque (lisez les détails sur n'importe quelle bibliothèque DI que vous utilisez, par exemple: www.ninject.org pour quelque chose de léger)
  • Donnez un objet à l'objet User qui prend une instance de l'interface de la population pour charger les données de

Ensuite, lorsque vous avez besoin d'un objet User, vous demandez la bibliothèque DI pour le créer, et la bibliothèque DI construira le User et lui donner une référence à la Implémentation de l'ORM. Vous devrez injecter des propriétés dans l'appel DI aussi bien pour le nom d'utilisateur que pour le mot de passe afin de pouvoir le remplir entièrement avec des valeurs. Notez que ce n'est pas exactement ce que DI a été inventé pour ... le code de l'application est vraiment supposé traiter directement avec ORM pour créer/lire/mettre à jour/supprimer des objets métier.

+0

Je suis impatient de trouver de meilleures solutions, mais c'est le meilleur que je peux trouver en ce moment. – jerryjvl

+0

Merci beaucoup Jerry! Cela a vraiment chatouillé ma pensée. –

Questions connexes