Y a-t-il quelque chose de fondamentalement faux avec la conception suivante, ou quelqu'un peut-il voir pourquoi les propriétés statiques perdraient-elles parfois leurs valeurs?Propriété statique perdant sa valeur par intermittence?
J'ai un projet de bibliothèque de classes contenant une classe AppConfig; cette classe est consommée par un projet Webforms.
Le squelette de la classe AppConfig est la suivante:
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
Les propriétés statiques mis une fois sur get démarrage de l'application, de l'événement Application_Start du Global.asax
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
//Fires when the application is started
AppConfig.OnApplicationStart()
End Sub
Par la suite, chaque fois que nous vouloir accéder à une valeur dans le Web.Config de n'importe où, par exemple aspx page code-behind ou une autre classe ou classe référencée, nous appelons simplement la propriété statique.
Par exemple,
AppConfig.ConfigValue1()
AppConfig.ConfigValue2()
C'est son tour renvoie la valeur stockée dans les champs de support statiques m_field1, m_field2
Le problème est parfois ces valeurs sont une chaîne vide, quand bien l'entrée Web.Config a valeurs.
Y a-t-il quelque chose de fondamentalement faux avec la conception ci-dessus, ou est-il raisonnable de s'attendre à ce que les propriétés statiques conservent leur valeur pendant toute la durée de la session Application?