2009-01-09 9 views
0

J'ai le "problème" suivant. J'ai créé un fichier de contexte d'application pour spring.net. La configuration ressemble à ceci:Spring.Net Contexte de l'application IoC

<spring> 
    <context> 
     <resource uri="config://spring/objects"/> 
    </context> 
    <objects configSource="SpringObjects.config" /> 
</spring> 

On m'a dit que si vous changez quelque chose dans le contexte de l'application que vous n'avez pas besoin de recompiler votre application pour voir les changements.

Cependant, si je change quelque chose dans le fichier de configuration. Aucun changement n'est vu. Ce sont toujours les données d'origine qui sont visibles.

J'appelle le contexte d'application comme ceci:

IApplicationContext ctx = ContextRegistry.GetContext(); 
    ManagementConfigurator configurator = (ManagementConfigurator)ctx.GetObject("ManagementConfigurator"); 

Parfois, il faut un certain temps pour que les changements soient visibles (même après recompiler l'application).

EDIT: Je viens de découvrir que vous devez redémarrer votre pool d'applications. Je vais juste reformuler ma question puis: "Pouvez-vous recharger le contexte de l'application au sein de votre application?" Sans avoir à redémarrer le pool d'applications.

Répondre

2

Le pool d'applications n'a pas besoin d'être redémarré, l'AppDomain associé à votre code d'exécution doit être recyclé. Je ne sais pas si c'est une option pour vous, mais si vous placez les objets spring dans le fichier web.config au lieu d'un fichier séparé, et que vous modifiez le fichier web.config (en changeant par exemple la configuration du ressort à l'intérieur it), l'AppDomain associé sera recyclé, ce qui devrait également signifier que votre application sera à nouveau reconfigurée. Vous pouvez également simplement modifier votre fichier SpringObjects.config et "toucher" le web.config par la suite. (Je ne suis pas sûr si mettre SpringObjects.config dans le répertoire bin est une bonne idée, mais une modification du répertoire bin provoque également un recyclage AppDomain)

Vous pouvez utiliser les méthodes ContextRegistry (Effacer, puis RegisterContext) par programme pour recharger le ApplicationContext, bien que je ne le recommanderais pas.