2010-01-20 5 views
2

J'essaie d'utiliser le conatiner IoC de spring.net dans une bibliothèque de classes qui, en soi, n'est pas un exécutable. Un projet web appelle simplement cette bibliothèque, cette bibliothèque contient les références aux binaires de printemps et aux fichiers de configuration du printemps. Essentiellement la question est: Est-ce que spring.net doit résider dans un exécutable pour démarrer, ou peut-il résider dans une bibliothèque de classes qui sera référencée par un exécutable?spring.net utilisé dans une bibliothèque de classes

Toute aide sera appréciée.

Répondre

2

il peut résider dans une DLL qui est référencée par un exécutable, mais assurez-vous que la configuration est incluse dans (ou référencée par) le fichier de configuration de l'exécutable.

+0

donc tous les paramètres de configuration de printemps doivent s'asseoir dans le fichier de configuration de l'exécutable? – AndyMM

3

Vous pouvez inclure une partie de votre configuration dans le projet de bibliothèque de classes en tant que fichier de ressources incorporé. Disons que vous l'appelez LibraryConfig.xml. Ensuite, dans le fichier de configuration de l'application de votre exécutable, vous incluez la ressource incorporée en utilisant le préfixe assembly:. Voici un exemple:

<spring> 
    <context type="Spring.Context.Support.XmlApplicationContext, Spring.Core"> 
    <resource uri="assembly://FooLibrary/FooLibrary/LibraryConfig.xml"/> 
    <resource uri="config://spring/objects" /> 
    </context> 
    <objects xmlns="http://www.springframework.net"> 
    <object id="mainForm" type="FooApp.MainForm, FooApp"> 
     <!-- mainController is some object defined in LibraryConfig.xml --> 
     <property name="Controller" ref="mainController"/> 
    </object> 
    </objects> 
</spring> 

Si votre application principale n'a pas besoin d'utiliser Spring lui-même, je pense que vous pouvez configurer l'ensemble du contexte d'application dans la bibliothèque. Incorporer le fichier de configuration comme décrit ci-dessus, puis définir un objet singleton pour contenir le contexte de l'application et le charger à partir du fichier de configuration intégré. Enfin, vous devez définir un certain type de méthodes d'usine pour le code client avec lequel créer vos classes. Les méthodes d'usine peuvent soit aller sur le singleton lui-même (probablement en utilisant des génériques), ou avoir une méthode d'usine distincte sur chaque classe qui doit être instanciée. Ces méthodes d'usine font les demandes réelles du contexte de l'application et le code client ne le voit jamais.

Questions connexes