2009-04-21 7 views
4

J'essaie de remplacer la méthode ApplyConfiguration dans mon ServiceHost personnalisé pour lire la configuration à partir d'une base de données au lieu de app.config. Idéalement, je voudrais être en mesure de faire quelque chose comme ceci:Comment lire app.config à partir d'un emplacement personnalisé, c'est-à-dire d'une base de données dans .NET

Configuration config = GetConfigFromMyDatabase (...);

ServiceModelSectionGroup serviceModel = ServiceModelSectionGroup.GetSectionGroup (config);

Est-il possible de le faire sans écrire un fichier app.config temporaire?

Répondre

4

Qu'en est-il en utilisant:

System.Configuration.ConfigurationManager.OpenExeConfiguration(string exePath) 

Cela devrait vous permettre d'ouvrir un fichier app.config arbitraire.

-1

Bien que vous ne souhaitiez pas écrire le fichier de configuration temporaire, la meilleure façon d'y parvenir est d'héberger votre ou vos service (s) dans un AppDomain distinct. Avant de créer votre AppDomain, prenez la config de la base de données et écrivez-la dans le système de fichiers, puis, lorsque vous créez votre point AppDomain, dans le fichier temp config que vous avez récupéré de la base de données.

Bien sûr, la configuration de la base de données doit être un fichier app.config complet, ou vous devez le fusionner avec un fichier de configuration de modèle contenant d'autres bits de configuration non-serviceModel pour le reste de votre application.

La mise en œuvre de cette façon est une solution assez soignée, et fonctionne bien (l'a déjà utilisé).

+0

se sent très hacky! – Cheeso

1

Vous n'avez pas besoin d'un AppDomain distinct si vous écrivez un ServiceHost personnalisé.

Le ServiceHost possède une méthode ApplyConfiguration que vous pouvez remplacer. Vous pouvez charger la configuration depuis où vous voulez.

See here pour un article pertinent décrivant la technique.