2009-01-22 5 views

Répondre

5

Probablement besoin d'un FileSystemWatcher pour surveiller le fichier et gérer l'événement pertinent. La classe System.Configuration.ConfigManager peut avoir les méthodes appropriées pour recharger (appel de méthode ou autre). Je n'ai pas VS en face de moi, mais je dirais qu'il y a certainement des crochets là-bas, c'est certain.

+0

Si vous descendez la route FileSystemWatcher, prenez soin des actions qui déclenchent plusieurs événements (pas sûr que ce soit encore un problème dans les révisions ultérieures, mais c'était toujours un problème pour .NET 2.0) – ZombieSheep

+2

c'est la System.Configuration Classe .ConfigurationManager, avec une méthode statique RefreshSection() – cruizer

2

Il y a une bonne section sur réellement faire le rechargement de données here. Combinez cela avec le FileSystemWatcher comme suggéré par DarkwingDuck, et vous pourriez bien être sur un gagnant.

2

Créez un FileSystemWatcher et écoutez les modifications dans le fichier de configuration.
Une fois déclenché, utilisez le code suivant:

MyGeneratedSettingsFile.Default.Reload(); 
1

log4net a la possibilité de détecter les changements externes * fichier .config. Et comme tout le monde l'a déjà dit, cela est fait en utilisant un FileSystemWatcher configuré pour écouter les modifications de votre fichier * .config.

Ligne de fond; FileSystemWatcher est le chemin à parcourir.

1

Il y a une implication plus large de simplement recharger le fichier de configuration, et c'est ainsi que le reste de l'application devrait réagir à cela. Par exemple, vous pouvez configurer vos couches de contexte de base de données pour SQL Server après avoir lu dans la configuration que vous allez parler à SQL Server et obtenu la chaîne de connexion correspondant.

Cependant, que se passe-t-il si l'utilisateur change cela par la suite et spécifie une base de données Oracle à la place? Il ne suffira pas simplement de recharger le fichier de configuration, vous devez être en mesure de dire au reste de l'application que quelque chose a également changé.

Je dirais que vous devriez faire abstraction de la partie configuration dans une nouvelle classe, qui a des événements. Une fois que vous décidez de recharger la configuration, cette classe devrait comprendre en interne quels paramètres ont changé et déclencher les événements appropriés.

Si vous utilisez un conteneur IoC, vous devrez peut-être re-câbler certaines de ses dépendances en raison de nouveaux paramètres. De cette manière, les éléments de votre application qui reposent sur la configuration et qui, pour une raison quelconque, peuvent mettre en cache les paramètres de configuration localement pendant un intervalle de temps donné doivent s'accrocher aux événements pertinents et y répondre. En ce qui concerne la détection et le rechargement du fichier de configuration lui-même, les autres réponses semblent avoir couvert ce problème, donc je ne vais pas le répéter ici.

0

Si vous utilisez .NET Framework 2 et que vous utilisez les paramètres de portée utilisateur, c'est assez transparent.Après avoir modifié les paramètres simplement appeler la méthode Save() et les nouveaux paramètres sont immédiatement disponibles

Par exemple

My.Settings.UpdateInterval = 10 
My.Settings.Save() 

Si le réglage est champ d'application alors FileSystemWatcher pourrait être la voie à suivre

4

Utilisez FileSystemWatcher pour être averti lorsque votre fichier de configuration change.

Utilisez ConfigurationManager.RefreshSection pour l'actualiser à partir du disque sans redémarrer votre application.

Questions connexes