Frage

Ich versuche, zu abstrahieren aus aller Datenbank-Code in eine separate Bibliothek und dann diese Bibliothek in meinem Code verwenden. Alle Datenbankverbindungen verwenden getippt Tableadapters getan, die ich per Drag & Drop in Datensatz in VS2005 erstellen, eine Verbindungszeichenfolge aus dem appSettings verwendet wird.

Das Problem, das ich habe, ist nicht in der Lage zu lösen, dass .Net den Bibliotheken appSettings zum anderen Projekt nicht propagieren, dass es verwendet wird.

Kurz gesagt, ich habe eine Datenbank-Layer-Bibliothek, MyProgram.DbLayer, die von anderen Projekten verwendet wird, wie MyProgram.Client usw. Als ich in der .client alle Datensätze hatte der Connectionstring in MyProgram.Client.exe war. Config, so dass ich es nach dem Bauprozess ändern könnte. Wenn ich es in die MyProgram.DbLayer diese Einstellung bewegt wird mir nicht avaliable, nachdem ich die Binärdateien zu bauen.

EDIT: Dies scheint ein allgemeineres Problem mit Application zu sein.

Was bemerkte ich, war, dass, wenn ich eine Einstellung in einer Bibliothek verwendete nur manuell hinzufügen wird es richtig gelesen werden. Das einzige, was ich jetzt brauche, ist für die Einstellung automatisch auch in der .config-Datei aufgenommen werden.

War es hilfreich?

Lösung

AppSettings / Connection wird immer von dem aktuell laufenden AppPool gelesen werden.

Damit meine ich:

Wenn ich A.exe, die eine Klasse DAL.cs hat. DAL.cs liest eine Verbindungszeichenfolge von Config, und es kehrt "abc" wie erwartet.

ich dann DAL.cs auf ein eigenes Projekt bewegen und somit seine eigene Montage. Ich kann es immer noch die Verbindungszeichenfolge aus app.config haben rufen jedoch Ich muss auf „Host“ die Baugruppe in einer laufenden Anwendung, und fügen Sie die Verbindungszeichenfolge, die Anwendungen app Config . Also, ich eine neue app.config erstellen und die Verbindungszeichenfolge "xyz" darin angeben, wenn es läuft, es läuft wie erwartet.

Wenn ich nun die Referenz im A.exe Projekt ändern, um die neuen DAL.dll zu verwenden, welche Verbindungszeichenfolge denken Sie, es wird? "xyz"? Nee! Es wird die "abc" verwenden wie zuvor, weil das nach wie vor in der Anwendungskonfigurationsdatei für A.exe konfiguriert ist.

Ich weiß, das funktioniert, weil ich bei vielen Windows- gemeinsamen DAL-Code verwendet und Web-Anwendungen.

Wenn irgendetwas davon ist unklar, oder hilft nicht Ihr Problem, lass es mich wissen, indem Sie auf diese Antwort zu kommentieren.

Update folgender Kommentar von OP

Mit dem „Host“ Ich meine, eine Anwendung, die auf dem gemeinsamen Code ruft. Dies kann ein Windows oder eine Web-Anwendung sein, im Grunde ist es der Anwendungskontext.

Sie müssen Einträge in den Konfigurationsdateien für jede Anwendung erstellen, die den gemeinsamen Code verwendet. Wenn ich Ihre ursprüngliche Frage falsch verstanden (durchaus möglich, es war ein langer Tag!) Und Sie mögen die Konfiguration als auch zentralisieren, dann müßten Sie:

  • Erstellen Sie eine Form von zentralen Speicher (sei es XML, DB, was auch immer).
  • Erhöhen Sie Ihre gemeinsamen Code Standardwerte müssen es ermöglichen, die zentrale Speicherung zu verbinden.
  • Von dort aus kann der Code dann so konfiguriert, sich auf der Grundlage der Informationen in der Konfiguration zu speichern.

Hope, das hilft:)

Andere Tipps

Wenn ich das Problem richtig verstanden, es klingt wie Sie benötigen

1.) Ein gemeinsamer Anwendungskontext für alle Datenzugriffe Anrufe

oder

2.) Eine andere Möglichkeit, die Konfigurationseinstellungen für den Zugriff auf

1: Wickeln Sie Ihre Datenschicht in einem Dienst, der unter einem einzigen Kontext ausgeführt wird (IIS, Windows-Dienst, usw.)

2: Schließen Sie den Configuration Management-Mechanismus verwenden, die Sie geliefert werden. Verwenden Sie stattdessen Eigenschaftsdateien in einem bestimmten Verzeichnis.

Vergessen Sie nicht, obwohl, dass die Konfigurationseinstellungen Kaskade von verschiedenen Ebenen. Zum Beispiel ... wenn Sie eine Einstellung in machine.config hinzufügen, dann jeder Anwendung auf dem Computer ausgeführt wird, dass die Einstellung nur verwenden, wenn es auf einem niedrigeren Niveau ersetzt ... Das kann ein guter Weg, um so eingerichtet werden, eine einheitliche Einstellung in Ihrem Konfigurationsdateien.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top