La mejor manera de utilizar en VB.Net Genéricos para My.Settings persistencia?
-
29-09-2019 - |
Pregunta
¿Se puede mejorar este genérico?
Estoy tratando de reducir la hinchazón de código, reducir los errores y simplificar el código subyacente mediante el uso de los genéricos. En este caso estoy aplicando a los genéricos declaración de propiedades con persistencia. Persistencia es implementado por My.Settings. Aquí está el código hasta el momento.
' 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
Uso:
Public Property Host As New MySettingsProperty(Of String)("Host")
Host.Value = "127.0.0.1"
Debug.WriteLine(Host.Value)
Ventajas:
- Usos My.Settings de persistencia
- Reduce el código detrás de la hinchazón de los captadores y definidores
- reduce los errores de codificación
- Bindable
- Instrumental INotifiyPropertChanged
Desventajas
- necesario añadir ".Value" a las propiedades.
- necesidad de especificar My.Settings nombre de la propiedad como constante de cadena.
- Clase debe residir en el mismo proyecto que My.Settings declaraciones.
Solución
Yo sólo portado esto desde c#
a vb
así que espero que es adecuado:
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
Y uso:
Debug.WriteLine(SettingsHelper.GetSetting(Function(s) s.Setting1))
SettingsHelper.SetSetting(Sub(s) s.Setting1 = "new value")
Espero que esto ayude.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow