Können Sie dieses Generikum verbessern?Beste Möglichkeit in VB.Net Generics für My.Settings Persistance zu verwenden?
Ich versuche, Code Bloat zu reduzieren, Fehler zu reduzieren und Codebehind durch Generics zu vereinfachen. In diesem Fall verwende ich Generics zur Deklaration persistabler Eigenschaften. Persistance wird von My.Settings implementiert. Hier ist der Code soweit.
' must be defined in same project as My.Settings!
Public Class MySettingsProperty(Of T)
Implements System.ComponentModel.INotifyPropertyChanged
Private m_Name As String
Sub New(ByVal Name As String)
m_Name = Name
End Sub
Sub New(ByVal Name As String, ByVal InitialValue As T)
m_Name = Name
Value = InitialValue
End Sub
Public Property Value As T
Get
Return CType(My.Settings(m_Name), T)
End Get
Set(ByVal value As T)
My.Settings(m_Name) = value
RaiseEvent PropertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs("Value"))
End Set
End Property
Private Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
End Class
Verbrauch:
Public Property Host As New MySettingsProperty(Of String)("Host")
Host.Value = "127.0.0.1"
Debug.WriteLine(Host.Value)
Vorteile:
- Verwendet My.Settings für persistance
- Code Reduziert hinter aufblasen von Getter und Setter
- Reduziert Codierungsfehler
- Bindbar
- Implementiert INotifiyPropertChanged
Nachteile
- Need ".Value" zu Eigenschaften anzuhängen.
- Müssen My.Settings-Eigenschaftsname als Zeichenfolge-Konstante angeben.
- Die Klasse muss sich in demselben Projekt befinden wie die My.Settings-Deklarationen.
Ich bin mir nicht sicher, ob die Profis die Nachteile überwiegen, die .value Anforderung wäre ein Aufwand, und all die Strings rumliegen ist auch nicht zu groß. Persönlich würde ich nur die ganze "MySettings" -Klasse vermeiden und eigene rollen. Ich habe nie gemocht, wie MS Konfiguration handhabt. – DarinH
Sie könnten einfach ein Objekt definieren und den DataContract Serializer zum Serialisieren/Deserialisieren verwenden. – DarinH