3 Stimmen

Änderung der Verbindungszeichenfolge aus der Klassenbibliothek in der Hauptanwendung während der Laufzeit

Sie können die Verbindungszeichenfolge während der Laufzeit wie folgt ändern. Sie stellen die Einstellung für die Verbindungszeichenfolge als separate Eigenschaft innerhalb der Klasse MySettings zum Schreiben bereit:

Partial Friend NotInheritable Class MySettings
    Public WriteOnly Property RunTimeConnectionString()
        Set(ByVal value)
            My.Settings("MyConnectionString") = value
        End Set
    End Property
End Class

Dann schreiben Sie an einer Stelle, wenn die Anwendung initialisiert wird (vor der Verwendung von Tabellenadaptern für typisierte Datensätze), etwas wie:

My.Settings.RunTimeConnectionString = My.Settings.ProductionConnectionString

Dabei ist ProductionConnectionString eine einfache String-Einstellung. Es handelt sich um eine Einstellung des Benutzerbereichs, so dass jeder Benutzer sie ändern kann (indem er ihr einen Wert zuweist, ähnlich wie im obigen Code) und sie durch den Aufruf von My.Settings.Save() speichern kann.

Dieser Code funktioniert gut für Verbindungsstrings, die ursprünglich im Hauptprojekt erstellt und in dessen Einstellungen (= app.config-Datei) gespeichert wurden.

Die Verbindungszeichenfolge in der app.config hat eigentlich einen längeren Namen: MyApp.MySettings.MyConnectionString.

Wenn Sie eine Verbindungszeichenfolge in der app.config in einem Klassenbibliotheksprojekt gespeichert haben und dieses Projekt im Hauptprojekt referenzieren, werden die app.config-Dateien irgendwie zusammengeführt, sodass die Klassenbibliothek ihre Einstellungen hat.

Die Sache, die nicht wissen, wie zu tun, ist eine Einstellung aus der Klassenbibliothek zur Laufzeit ändern. Ich könnte die Einstellung für die Verbindungszeichenfolge aus der Klassenbibliothek in die app.config des Hauptprojekts kopieren. Ich muss denselben Namen beibehalten, der etwa so aussieht: MyClassLibrary.My.MySettings.MyConnectionString.

Kann das gleiche Prinzip, das ich oben gezeigt habe, irgendwie auf diese zweite Verbindungszeichenfolge angewendet werden?

1voto

Dragoljub Ćurčić Punkte 249

Ich habe ein wenig mehr getestet und herausgefunden, dass die gleiche Lösung kann innerhalb einer Klassenbibliothek verwendet werden .

Ich habe eine neue Klasse (in der Klassenbibliothek) mit einer gemeinsamen (statischen) Methode wie dieser erstellt:

Public Class MySettingsChanger
    Public Shared Sub SetConnectionString(ByVal cnnString As String)
        My.Settings.RunTimeConnectionString = cnnString
    End Sub
End Class

Und erweiterte die Klasse MySettings (in der Klassenbibliothek) auf die gleiche Weise wie im Hauptprojekt:

Namespace My
    Partial Friend NotInheritable Class MySettings
        Public WriteOnly Property RunTimeConnectionString()
            Set(ByVal value)
                My.Settings("MyConnectionString") = value
            End Set
        End Property
    End Class
End Namespace

Zumindest funktioniert es in meinem Fall. Der Name der Verbindung im Hauptprojekt und in der Klassenbibliothek ist nur derselbe (der Kurzname, nicht der ganze ProjectNamespace.MySettings.ConnectionName). Ich habe nicht getestet, ob der Name der Verbindung in der Klassenbibliothek anders lautet, aber ich denke, das sollte keine Rolle spielen.

0voto

Ich habe weiter gesucht und einen Weg gefunden, aber er ist nicht wirklich lauffähig. Zumindest nicht so lauffähig, wie ich es mir wünschen würde. Wie auch immer, hier ist der Code, ich testete es und es funktionierte, aber ich musste die Anwendung erst neu starten . Das ist für mich nicht sehr laufzeitorientiert.

    Dim configLocation As String = Reflection.Assembly.GetExecutingAssembly().Location
    Dim config As Configuration.Configuration = Configuration.ConfigurationManager.OpenExeConfiguration(configLocation)
    config.ConnectionStrings.ConnectionStrings.Clear()
    For i As Integer = 0 To Configuration.ConfigurationManager.ConnectionStrings.Count - 1
        Dim connection As New Configuration.ConnectionStringSettings(Configuration.ConfigurationManager.ConnectionStrings(i).Name, My.Settings.ProductionConnectionString)
        connection.ProviderName = Configuration.ConfigurationManager.ConnectionStrings(i).ProviderName
        config.ConnectionStrings.ConnectionStrings.Add(connection)
    Next
    config.Save()

In diesem Artikel habe ich diesen Code gefunden.

0voto

Colby Africa Punkte 1346

Danke für die Nachricht im Blog. Ja, es handelt sich kaum um eine Runtime, da die Änderungen erst nach einer Unterbrechung des Betriebs übernommen werden können. Da die Einstellungen einmal und nur einmal geladen werden (beim Laden der App-Domäne), gibt es leider keine Möglichkeit für die Einstellungsinfrastruktur, Änderungen während des Betriebs zu übernehmen.

Die einzige Möglichkeit besteht darin, entweder die Anwendung neu zu starten oder den Anwendungspool zu rezyklieren, wenn es sich um eine Webanwendung handelt. Darüber hinaus müssen Sie Ihre eigene Lösung finden.

Ich habe getan, was ich konnte :-)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X