Что-то в корне неверно со следующим дизайном, или кто-нибудь может понять, почему статические свойства иногда теряют свои значения?
У меня есть проект библиотеки классов, содержащий класс AppConfig; этот класс используется проектом Webforms.
Скелет класса AppConfig выглядит следующим образом:
Public Class AppConfig
Implements IConfigurationSectionHandler
Private Const C_KEY1 As String = "WebConfig.Key.1"
Private Const C_KEY2 As String = "WebConfig.Key.2"
Private Const C_KEY1_DEFAULT_VALUE as string = "Key1defaultVal"
Private Const C_KEY2_DEFAULT_VALUE as string = "Key2defaultVal"
Private Shared m_field1 As String
Private Shared m_field2 As String
Public Shared ReadOnly Property ConfigValue1() As String
Get
ConfigValue1= m_field1
End Get
End Property
Public Shared ReadOnly Property ConfigValue2() As String
Get
ConfigValue2 = m_field2
End Get
End Property
Public Shared Sub OnApplicationStart()
m_field1 = ReadSetting(C_KEY1, C_KEY1_DEFAULT_VALUE)
m_field2 = ReadSetting(C_KEY2, C_KEY1_DEFAULT_VALUE)
End Sub
Public Overloads Shared Function ReadSetting(ByVal key As String, ByVal defaultValue As String) As String
Try
Dim setting As String = System.Configuration.ConfigurationManager.AppSettings(key)
If setting Is Nothing Then
ReadSetting = defaultValue
Else
ReadSetting = setting
End If
Catch
ReadSetting = defaultValue
End Try
End Function
Public Function Create(ByVal parent As Object, ByVal configContext As Object, ByVal section As System.Xml.XmlNode) As Object Implements System.Configuration.IConfigurationSectionHandler.Create
Dim objSettings As NameValueCollection
Dim objHandler As NameValueSectionHandler
objHandler = New NameValueSectionHandler
objSettings = CType(objHandler.Create(parent, configContext, section), NameValueCollection)
Return 1
End Function
End Class
Статические свойства устанавливаются один раз при запуске приложения из события Application_Start в Global.asax
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
//Fires when the application is started
AppConfig.OnApplicationStart()
End Sub
После этого всякий раз, когда мы хотим получить доступ к значению в Web.Config из любого места, например, Кодовый файл страницы aspx или другой класс или ссылочный класс, мы просто вызываем статическое свойство.
Например,
AppConfig.ConfigValue1()
AppConfig.ConfigValue2()
Этот ход возвращает значение, сохраненное в статических полях поддержки m_field1, m_field2
Проблема в том, что иногда эти значения представляют собой пустую строку, когда ясно, что запись Web.Config имеет значения.
Что-то в корне не так с вышеуказанным дизайном, или разумно ожидать, что статические свойства сохранят свое значение в течение всего жизненного цикла приложения?