Лучший способ в VB.Net использовать Generics для My.Settings Persistance?

Можете ли вы улучшить этот универсальный?

Я пытаюсь уменьшить раздувание кода, уменьшить количество ошибок и упростить код, используя обобщенные элементы. В этом случае я применяю дженерики для объявления постоянных свойств. Персистентность реализована My.Settings. Вот код до сих пор.

' 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

Использование:

Public Property Host As New MySettingsProperty(Of  String)("Host")
Host.Value = "127.0.0.1"
Debug.WriteLine(Host.Value)

Преимущества:

  1. Использует My.Settings для настойчивости
  2. Уменьшает код раздувания от добытчиков и сеттеров
  3. Уменьшает ошибки кодирования
  4. Bindable
  5. Реализует INotifiyPropertChanged

Недостатки

  1. Необходимо добавить ".Value" к свойствам.
  2. Необходимо указать имя свойства My.Settings как строковую константу.
  3. Класс должен находиться в том же проекте, что и объявления My.Settings.

1 ответ

Решение

Я просто портировал это из c# в vb так что надеюсь это подойдет

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

И использование:

Debug.WriteLine(SettingsHelper.GetSetting(Function(s) s.Setting1))

SettingsHelper.SetSetting(Sub(s) s.Setting1 = "new value")

Надеюсь это поможет.

Другие вопросы по тегам