2010-09-08 6 views
2

Scénario: J'ai 2 projets, MainApplication (qui compile un exe) et ClassLibrary1. Maintenant MainApplication référence ou charge ClassLibrary1, mais ClassLibrary1 n'a aucune idée de MainApplication.Comment lire Application.Setting de la bibliothèque de classes référencées

Mais je veux utiliser les paramètres (Propriétés de Dot.Net 2.0. Réglages PAS appSettings) qui sont définis dans MainApplication.

Comment faites-vous cela?

Je semble des exemples PLENTY qui utilisent

System.Configuration.ConfigurationSettings.AppSettings.Get("SettingName"); 

Ce n'est pas pertinente à ma situation appSettings est vieille école et je suis en utilisant les nouveaux mécanismes de Properties.Settings.

Votre aide est appréciée :)

Répondre

0

Comme la classe Settings est défini sur le projet principal, vous ne pouvez pas accéder directement à partir du projet de classe parce que vous devez créer une dépendance circulaire. Ce que vous devez faire est de fournir à la bibliothèque de classes un délégué qu'elle peut appeler pour récupérer dynamiquement les paramètres du projet principal. Créez une classe qui stocke un délégué dans la bibliothèque de classes et définissez ce délégué sur une méthode définie dans le projet principal. Cette méthode encapsulerait les instructions nécessaires pour récupérer un paramètre. Et à mon avis, appSettings n'est pas old school, c'est juste une façon de représenter les paramètres de configuration qui ne sont pas spécifiques ou personnalisables par un utilisateur.

+1

plus élégante que je ne voulais pas ajouter directement une référence. L'ajout d'une action d'un délégué est "ok-ish". AppSettings est définitivement old school :) La méthode pour récupérer AppSettings est même marquée comme obsolète. – Oliver

1

je l'ai fait quelques recherches dans le code. je peux obtenir le réglage comme cela, mais il est vraiment sale:

((ClientSettingsSection)ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).SectionGroups["applicationSettings"].Sections["MainApplication.Properties.Settings"]).Settings.Get("Tester").Value.ValueXml.InnerText; 

Peut-être que quelqu'un peut fournir un soliton