| |
VB.NET - FortgeschritteneSingleton - Feedback | | | Autor: Sepp_81 | Datum: 05.09.14 11:05 |
| Hallo zusammen,
ich muss meinen logger als Singleton umsetzen und habe dabei gleich noch probiert properties zu verwenden.
Ich würde gerne ein Feedback haben ob ich das richtig gemacht habe. Evtl kann jemand mal seine Meinung zum Code äußern oder mich belehren wie man es besser macht.
Hier der Code
'System.VisualBasic auskommentiert
Option Strict On
Option Explicit On
Public Class frmMain
Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles _
MyBase.Load
LoggerClass.Instance.LoggerInfo("Testmessage", 2)
End Sub
End Class 'System.VisualBasic auskommentiert
Option Strict On
Option Explicit On
Imports LoggerSingleton.LogDataSet
Public Class LoggerClass
Private Shared LoggerDataSet As New LogDataSet
Private _ex As Exception
Private _message As String
Private _priority As Integer
'### Singlton Instance
Private Shared LoggerSingletonObject As LoggerClass
Public Shared ReadOnly Property Instance() As LoggerClass
Get
If LoggerSingletonObject Is Nothing Then
LoggerSingletonObject = New LoggerClass
End If
Return LoggerSingletonObject
End Get
End Property
'### Logger
Public WriteOnly Property P_ex As Exception
Set(value As Exception)
_ex = value
End Set
End Property
Public WriteOnly Property P_message As String
Set(value As String)
_message = value
End Set
End Property
Public WriteOnly Property P_priority As Integer
Set(value As Integer)
_priority = value
End Set
End Property
''' <summary>
''' Schreibt die Fehlermeldung ins Log
''' </summary>
''' <param name="ex">Fehlermeldung</param>
''' <param name="priority">1:Fehler; 2:Problematisch; 3:Information</param>
''' <remarks></remarks>
Public Sub LoggerInfo(ByVal ex As Exception, ByVal priority As Integer)
P_ex = ex
P_priority = priority
Dim trace As Diagnostics.StackTrace = New Diagnostics.StackTrace(_ex, _
True)
Dim fileNames As String = trace.GetFrame((trace.FrameCount - _
1)).GetFileName()
Dim lineNumber As Integer = trace.GetFrame((trace.FrameCount - _
1)).GetFileLineNumber()
Try
LoggerDataSet.Log.AddLogRow(_priority, Date.Now, _ex.Message, _
fileNames, lineNumber)
Catch genEx As Exception
LoggerInfo(genEx.Message, 1)
End Try
End Sub
''' <summary>
''' Schreibt eine Information/Nachricht ins Log
''' </summary>
''' <param name="message">Fehlermeldung</param>
''' <param name="priority">1:Fehler; 2:Problematisch; 3:Information</param>
''' <remarks></remarks>
Public Sub LoggerInfo(ByVal message As String, ByVal priority As Integer)
P_message = message
P_priority = priority
Try
Dim fileNames As String = ""
Dim lineNumber As Integer
LoggerDataSet.Log.AddLogRow(_priority, Date.Now, _message, _
fileNames, lineNumber)
Catch genEx As Exception
LoggerInfo(genEx.Message, 1)
End Try
End Sub
End Class
Danke
Beitrag wurde zuletzt am 05.09.14 um 11:07:24 editiert. | |
Singleton - Feedback | | | Autor: Manfred X | Datum: 20.10.14 16:49 |
| Ein Wikipedia-Artikel schlägt vor, die Threadsynchronisierung
durch ein LockObjekt bei der Konstruktion der Instanz zu sichern.
https://de.wikipedia.org/wiki/Liste_von_Singleton-Implementierungen
Public Class Singleton
' Variable zur Speicherung der einzigen Instanz
Private Shared instance As Singleton = Nothing
' Hilfsvariable für eine sichere Threadsynchronisierung.
Private Shared ReadOnly mylock As New Object()
' Konstruktor ist privat, damit die Klasse nur aus sich
' selbst heraus instanziiert werden kann.
Private Sub New()
'
End Sub
' Diese Shared-Methode liefert die einzige Instanz der Klasse zurück.
Public Shared Function GetInstance() As Singleton
SyncLock (mylock)
If instance Is Nothing Then
instance = New Singleton
End If
End SyncLock
Return instance
End Function
End Class Ich bevorzuge Shared-Klassen / Shared-Member.
Und in VB gibt es auch Module.
Singletons sind eher als Basis für Ableitungen interessant.
Beitrag wurde zuletzt am 20.10.14 um 16:59:19 editiert. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevEingabe 3.0
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|