2

J'essaie d'utiliser la carte de structure pour la première fois. J'ai déjà utilisé des conteneurs ioc, mais toujours avec xml config. Comme la carte de structure utilise la configuration via le code (je sais que cela peut aussi être fait en XML, mais la plupart des exemples utilisent le code de configuration). Je rencontre des problèmes avec des références.Structuremap et références, quelles sont les meilleures pratiques?

Travaillons avec l'exemple suivant (pas un vrai un):

3 assemblées.

dataLayer BusinessLayer services

Le BusinessLayer fait référence à la couche de données (il peut récupérer des données) Les deux dataLayer et le BusinessLayer fait référence à l'ensemble des services, car il contient le code pour l'exploitation forestière.

Je souhaite que le composant Journal soit géré par StructureMap afin que je puisse modifier le composant de journal.

Dans la couche de gestion, certains composants sont également fournis par StructureMap.

Donc, mon problème est maintenant.

Où dois-je mettre la structure map config?

Si je le place dans BusinessLayer, DataLayer ne peut pas utiliser le composant Log (car une référence renvoyée à la couche de gestion résoudrait dans une référence cyclique). Je ne peux pas le mettre dans le projet Services car il existe également des composants dans BusinessLayer (et la couche de gestion a une référence à l'assembly de service).

J'espère que je me suis assez bien expliqué. Le problème principal ici est que StructureMap a besoin d'une référence à un assembly avant de pouvoir être configuré, ce que je trouve un peu problématique de travailler avec. Est-ce que je fais tout faux?

Répondre

3

La configuration du conteneur doit se situer au niveau supérieur, à la couche de présentation: site Web, service Web, application console, application Windows ou service Windows. Ainsi, vous pouvez injecter tout ce dont vous avez besoin où vous voulez.

+0

Conseils judicieux, mais que faire si j'ai plusieurs "couches supérieures"? Par exemple. Dans mon projet, j'ai des workflows sous SharePoint (sans interface utilisateur) et des WebParts dans un projet web (c'est un projet sharepoint). – user392471

+0

Cela dépend de la façon dont ces flux de travail s'exécutent. Vous pourriez avoir besoin de plus d'un conteneur. J'ai un projet web contenant des services web. J'ai un conteneur pour l'application Web et deux conteneurs pour les services Web. Ces conteneurs sont des enfants (Unity permet aux enfants des conteneurs, je ne sais pas sur StructrureMap) d'un conteneur commun contenant des choses communes (consignation, etc.). – onof

+1

Ok merci. Je suppose qu'une question implicite dans ma "principale" question était de savoir s'il était "bien" d'avoir plusieurs conteneurs. Je peux toujours utiliser des registres pour contenir une configuration commune. – user392471

0

Je place la configuration programmatique (IoC ou autre) dans une méthode bootstrap au niveau du processus. Par conséquent, dans un système client/serveur, le processus client aura son propre bootstrap pour toute configuration dont il a besoin et le processus serveur aura une méthode bootstrap distincte pour toute configuration dont il a besoin (ceci peut être du code réutilisé).). Par exemple, le bootstrap client n'a pas besoin de connaître la configuration DAL et le bootstrap du serveur n'a pas besoin de connaître la configuration de l'interface utilisateur.

Questions connexes