2009-09-14 6 views
1

J'essaie de concevoir une bibliothèque d'infrastructure pour mon entreprise. Les bibliothèques auront des composants typiques comme la journalisation, la gestion des exceptions, le courrier électronique, etc. Ces composants seront utilisés par toutes les applications ASP.Net hébergées sur notre environnement (donc l'environnement d'hébergement est mon contrôle).Un conteneur DI pour plusieurs applications ASP.Net

Ma première étape dans la conception est que je ne voudrais pas que les applications ASP.nEt aient une référence directe aux composants de la bibliothèque. Donc je pense à Injecter ces dépendances à l'exécution. J'ai évalué un certain nombre de conteneurs DI (unity, spring.net etc)

Mais ce que je n'ai pas à faire est de forcer toutes les applications ASP.Net à utiliser ce conteneur DI. Ils recevront une interface Dll pour tous les composants de la bibliothèque et une DLL d'usine qui leur donnera l'exemple concret du composant.

Ma question est quelle est la meilleure façon de concevoir cette DLL d'usine afin qu'une seule DLL puisse desservir toutes les applications ASP.Net? Puis-je utiliser un conteneur DI pour gérer toutes les applications ASP.Net?

Répondre

1

Eh bien, vous pouvez définir simplement une interface de conteneur comme celui-ci:

public interface IContainer 
{ 
    T Resolve<T>(); 
} 

(évidemment, vous pouvez ajouter d'autres méthodes si vous avez besoin). Vous pouvez ensuite créer une implémentation concrète de cette interface IContainer basée sur votre conteneur DI de votre choix.

De telles implémentations concrètes pourraient encapsuler toute la configuration dont votre application a besoin en termes de composants enregistrés. Vos applications ASP.NET consomment simplement l'interface IContainer et appellent la méthode Resolve pour obtenir des instances des composants nécessaires.

+0

Merci pour la réponse Mark ... Je pense que je n'ai pas posé ma question correctement. Mon problème n'est pas que j'ai plusieurs conteneurs DI à décider. Je n'aurai qu'un seul conteneur DI. Mon problème de messagerie est de savoir comment ce conteneur DI sera utilisé par plusieurs applications ASP.Net. Plus comme un Single DI Container (une classe wrapper unique sur un conteneur DI) ... j'espère que cela a du sens ou si ce n'est pas OK que chaque application ASP.Net crée une instance de la classe wrapper et que le conteneur DI s'occupe de la création des composants de la bibliothèque .. – rauts

+0

@rauts: Alors pourquoi ne pas simplement créer une instance de votre conteneur sélectionné directement dans global.asax (ou un endroit similaire)? C'est l'idée ... –

+0

@rauts: Jetez un oeil à cette réponse SO qui explique ce que je voulais dire par mon commentaire précédent: http://stackoverflow.com/questions/1410719/design-where-should-objects-be- registered-when-using-windsor/1410738 # 1410738 –

Questions connexes