2010-01-14 6 views
1

J'ai des problèmes pour implémenter le Unity IOC dans mon projet de lecture depuis le fichier de configuration.Comment utiliser/configurer Unity Container IOC dans ma situation

Voici ce que j'ai

1) ClasslibraryA

2) ClasslibraryB qui fait référence ClasslibraryA

3) Winforms App référençant ClasslibraryB

Note: someother app référence ClassLibraryA, par exemple . un service web.

La bibliothèque de classesA devra être configurée pour IOC en fonction de l'endroit où elle est utilisée. par ex. IDataSource sera différent s'il est appelé dans le service Web et quand il est appelé depuis une application locale.

ClasslibraryB aura son propre ensemble de dépendances ainsi que d'être injecté par l'application principale, dans ce cas, l'application winforms. ClasslibraryB va instancier de nombreux objets ClasslibraryA dans une boucle.

L'application Winforms contiendra l'implémentation concrète de l'implémentation des dépendances de ClassLibraryB et Container.Configure devrait être appelée ici?

Mes questions sont

Quand et où dois-je appeler le Container.Configure dans l'application?
Ai-je besoin d'un conteneur enfant pour tous les niveaux/couches de la bibliothèque secondaire?
La classlibraryB ou les winforms devraient-elles implémenter la classe concrète pour que ClasslibraryA soit injectée dans classlibraryA? Dois-je regrouper la config IOC de chaque couche/niveau dans un nom de conteneur différent dans le fichier de configuration?

Répondre

3

Chaque application possède un conteneur séparé et est responsable de la configuration de cette instance de conteneur. La configuration et l'appel à résoudre doivent se faire le plus près possible du point d'entrée de l'application. C'est ce qu'on appelle le Composition Root.

Votre application Windows Forms doit posséder, configurer et résoudre le conteneur dans son code d'amorçage. Le fait qu'il puisse y avoir d'autres applications qui utilisent aussi ClassLibraryA est totalement hors de propos.

Le service Web doit posséder un autre conteneur et le configurer en fonction de ses besoins. Il ne sait rien sur l'application Windows Forms.

Voici plus d'informations sur Roots Composition:

Toutes les bibliothèques doivent être complètement DI Container-agnostique afin que vous puissiez utiliser un conteneur (et n'importe quelle instance de conteneur) pour câbler toutes les dépendances.

Voir ici pour plus de détails:

Comme vous pouvez le remarquer, ce sont des principes généraux et appliquent à DI globale - pas seulement à l'unité.

0

vous devez appeler le Container.Configure au début de l'application, mais le ClassLibraryA doit recevoir la dépendance à la main, ayant peut-être le WebMethod qui est appelé insantiate le (ou demander au cio pour une instance) bon type

Questions connexes