La meilleure façon de VB.Net à utiliser pour Generics My.Settings Persistance?
-
29-09-2019 - |
Question
Pouvez-vous améliorer ce générique?
Je suis en train de réduire le code ballonnement, réduire les erreurs et codebehind Simplify par l'utilisation des médicaments génériques. Dans ce cas, je fais une demande de génériques à la déclaration des propriétés persistables. Persistence est mis en œuvre par My.Settings. Voici le code à ce jour.
' 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
Utilisation:
Public Property Host As New MySettingsProperty(Of String)("Host")
Host.Value = "127.0.0.1"
Debug.WriteLine(Host.Value)
Avantages:
- Utilise My.Settings pour persistence
- Réduit le code derrière ballonnement de accesseurs
- réduit les erreurs de codage
- Bindable
- Met en œuvre INotifiyPropertChanged
Inconvénients
- besoin d'ajouter ".Value" aux propriétés.
- Nécessité de préciser My.Settings nom de la propriété comme constante de chaîne.
- classe doit résider dans un même projet que les déclarations de My.Settings.
La solution
Je viens de Ported ce c#
à vb
si nous espérons qu'il est approprié:
Module SettingsHelper
Public Function GetSetting(Of TSetting)(ByVal selector As Func(Of My.MySettings, TSetting)) As TSetting
Return selector(My.Settings)
End Function
Public Sub SetSetting(ByVal action As Action(Of My.MySettings))
action(My.Settings)
End Sub
End Module
utilisation:
Debug.WriteLine(SettingsHelper.GetSetting(Function(s) s.Setting1))
SettingsHelper.SetSetting(Sub(s) s.Setting1 = "new value")
Hope this helps.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow