Question

J'essaie d'extraire tout le code de la base de données dans une bibliothèque distincte, puis d'utiliser cette bibliothèque dans tout mon code. Toutes les connexions à la base de données sont effectuées à l'aide de TableAdapters typés que je crée en glissant-déposant des ensembles de données dans VS2005, à l'aide d'une chaîne de connexion à partir de appSettings.

Le problème que je n’ai pas pu résoudre est que .Net ne propage pas les bibliothèques appSettings à l’autre projet qui l’utilise.

En bref, je dispose d’une bibliothèque de couches de base de données, MyProgram.DbLayer, utilisée par d’autres projets tels que MyProgram.Client, etc. config afin que je puisse le changer après la construction. Lorsque je l'ai déplacé dans MyProgram.DbLayer, ce paramètre ne m'est pas disponible après la création des fichiers binaires.

EDIT: Cela semble être un problème plus général avec ApplicationSettings.

Ce que j'ai remarqué, c'est que si j'ajoute manuellement un paramètre utilisé uniquement dans une bibliothèque, il sera correctement lu. La seule chose dont j'ai besoin maintenant, c'est que le paramètre soit automatiquement inclus dans le fichier .config.

Était-ce utile?

La solution

AppSettings / ConnectionStrings seront toujours lus à partir du pool d'applications en cours d'exécution.

Je veux dire par là:

Si j'ai A.exe qui a une classe DAL.cs. DAL.cs lit une chaîne de connexion à partir de config et renvoie "abc" comme prévu.

Je déplace ensuite DAL.cs vers son propre projet, et donc son propre assemblage. Je peux toujours le faire appeler la chaîne de connexion depuis app.config, cependant, je devrai & "Hôte &"; l'assembly dans une application en cours d'exécution et ajoutez la chaîne de connexion à cette application config . Je crée donc un nouveau fichier app.config et spécifie la chaîne de connexion "xyz" qui s’y trouve. Lorsqu’il est exécuté, il se déroule comme prévu.

Maintenant, si je change la référence dans le projet DAL.dll pour utiliser le nouveau <=>, quelle chaîne de connexion pensez-vous qu'il aura? <=>? Nan! Il utilisera <=> comme auparavant, car il est toujours configuré dans le fichier de configuration de l'application pour <=>.

Je sais que cela fonctionne parce que j'ai utilisé du code DAL partagé dans de nombreuses applications Web et Windows.

Si ceci n’est pas clair ou n’aide pas votre problème, merci de me le faire savoir en commentant cette réponse.

Mettre à jour le commentaire suivant de l'OP

Par " hôte " Je veux dire une application qui appelle le code commun. Cela peut être une application Windows ou Web, il s’agit en gros du contexte de l’application.

Vous devrez créer des entrées dans les fichiers de configuration pour chaque application utilisant le code commun. Si j'ai mal compris votre question initiale (tout à fait possible, la journée a été longue!) Et que vous souhaitez également centraliser la configuration, vous devez alors:

  • Créez une forme de stockage centralisé (XML, DB, etc.).
  • Améliorez votre code commun pour lui attribuer des valeurs par défaut lui permettant de se connecter au stockage centralisé.
  • À partir de là, le code peut se configurer lui-même, en fonction des informations du magasin de configuration.

J'espère que cela vous aidera:)

Autres conseils

Si je comprends bien votre problème, il semblerait que vous ayez besoin de

1.. Un contexte d'application commun pour tous les appels d'accès aux données

ou

2.) Une autre façon d’accéder aux paramètres de configuration

1: Enveloppez votre couche de données dans un service qui s'exécute dans un contexte unique (IIS, Service Windows, etc.)

2: n'utilisez pas le mécanisme de gestion de la configuration fourni. Utilisez plutôt les fichiers de propriétés dans un emplacement spécifique.

N'oubliez pas cependant que les paramètres de configuration proviennent de différents niveaux. Par exemple ... si vous ajoutez un paramètre dans machine.config, chaque application exécutée sur cet ordinateur utilisera ce paramètre à moins qu'il ne soit remplacé à un niveau inférieur ... Cela peut être un bon moyen de configurer un paramètre standard dans votre environnement. fichiers de configuration.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top