example of a file by file SettingsProvider

Posted Wed, Aug 30 2006 20:27 by bill
the following is the code for the custom SettingsProvider from Geoff and mine's TechEd 2006 presentation:
Option Strict On
Option Explicit On
Imports System
Imports System.Configuration
''' <summary>
''' simple example of a SetitngsProvider that saves each individual setting in it's own file
''' </summary>
''' <remarks>to use, add a setitng to My.Settigns designer, open the properties window
''' and set the provider to FileByFileSettingsProvider if in the same project, otherwise the full name.
''' </remarks>
Public Class FileByFileSettingsProvider
   Inherits SettingsProvider
#Region "constructor and initialize"
   Public Sub New()
   End Sub
   Public Overrides Sub Initialize(ByVal name As StringByVal config As System.Collections.Specialized.NameValueCollection)
      If name Is Nothing Then name = My.Application.Info.ProductName
      m_appName = name
      MyBase.Initialize(m_appName, config)
   End Sub
   Private m_appName As String
   Public Overrides Property ApplicationName() As String
         Return m_appName
      End Get
      Set(ByVal value As String)
         m_appName = value
      End Set
   End Property
#End Region
   'HACK: hard coded root path. In practice use assembly path or similar
   Private m_rootPath As String = "E:\test\"
   Public Overrides Function GetPropertyValues(ByVal context As SettingsContext, _
                                                ByVal properties As SettingsPropertyCollection) _
                                                As SettingsPropertyValueCollection
      Dim values As New SettingsPropertyValueCollection
      For Each setting As SettingsProperty In properties
         Dim filepath As String = m_rootPath & setting.Name & ".xml"
         Dim value As New SettingsPropertyValue(setting)
         With My.Computer.FileSystem
            If .FileExists(filepath) Then
               value.SerializedValue = .ReadAllText(filepath)
               ' coment out the preceeding line and uncomment the following line to make the serialization binary
               'value.PropertyValue = GetObjectFromBytes(.ReadAllBytes(filepath))
            End If
            value.IsDirty = False
         End With
      Return values
   End Function
   Public Overrides Sub SetPropertyValues(ByVal context As SettingsContext, _
                                          ByVal values As SettingsPropertyValueCollection)
      For Each value As SettingsPropertyValue In values
         Dim filepath As String = m_rootPath & value.Name & ".xml"
         My.Computer.FileSystem.WriteAllText(filepath, value.SerializedValue.ToString, False)
         ' coment out the preceeding line and uncomment the following line to make the serialization binary
         ' My.Computer.FileSystem.WriteAllBytes(filepath, GetObjectBytes(value.PropertyValue), False)
   End Sub
#Region "helper methods"
   'HACK: this is sub-optimal means of reading the binary stream from disk.
   Private Function GetObjectBytes(ByVal obj As ObjectAs Byte()
      Using buffer As New IO.MemoryStream()
         Dim formatter As New Runtime.Serialization.Formatters.Binary.BinaryFormatter()
         formatter.Serialize(buffer, obj)
         Return buffer.GetBuffer
      End Using
   End Function
   'HACK: this is sub-optimal means of writing out the binary stream to disk.
   Private Function GetObjectFromBytes(ByVal bytes As Byte()) As Object
      Using buffer As New IO.MemoryStream(bytes)
         Dim formatter As New Runtime.Serialization.Formatters.Binary.BinaryFormatter()
         Return formatter.Deserialize(buffer)
      End Using
   End Function
#End Region
End Class
Filed under: ,


# ASP.NET Services

Sunday, September 03, 2006 7:22 AM by Nick Randolph's .NET Travels

This evening I decided that I would venture outside and go and see a movie. Having not judged the distance...