Я понял это и выкладываю свой код для справки. Копая страницы о фабриках классов / объектов (спасибо RBarry), я нашел несколько ссылок на Activator.CreateInstance()
в классе System.Reflection, который я придумал.
Imports Microsoft.VisualBasic
Imports System.Runtime.CompilerServices
Imports System.Reflection
Public Module enviornmentUtilities
<Extension()> _
Public Function SessionSinglton(ByVal objType As Type) As Object
Dim sessionName As String = objType.FullName.ToString
If Not HttpContext.Current.Session(sessionName) Is Nothing Then
HttpContext.Current.Trace.Write(HttpContext.Current.Session(sessionName).ToString)
Return HttpContext.Current.Session(sessionName)
Else
Dim ss = Activator.CreateInstance(objType)
HttpContext.Current.Session(sessionName) = ss
Return ss
End If
End Function
End Module
Это позволит вам создать синглтон на основе сеанса из любого класса, для которого не требуются параметры в новом методе (который не требуется для этой работы)
Для проверки я сделал простой класс:
Public Class HasNew
Public FreshInstance As Boolean = True
Public Sub New()
HttpContext.Current.Trace.Warn("This Class has a new method")
End Sub
Public Sub CheckFreshness()
If FreshInstance Then
HttpContext.Current.Trace.Warn("Fresh HasNew Instance")
FreshInstance = False
Else
HttpContext.Current.Trace.Warn("NotFresh HasNew Instance")
End If
End Sub
Public Shared Function type() As Type
Return GetType(HasNew)
End Function
Public Shared Function SessionSinglton() As HasNew
Return GetType(HasNew).SessionSinglton
End Function
End Class
Вы заметите два открытых общедоступных метода type () и SessionSinglton, которые вызывают вышеуказанный метод расширения.
С этими двумя добавленными функциями у нас есть три способа инициировать сеанс Singlton, продемонстрированный здесь:
Dim HN As HasNew
HN = HasNew.SessionSinglton
HN.CheckFreshness()
HN = HasNew.type.SessionSinglton
HN.CheckFreshness()
HN = GetType(HasNew).SessionSinglton
HN.CheckFreshness()
Вывод трассировки для этого файла выглядит следующим образом:
This Class has a new method
Fresh HasNew Instance
NotFresh HasNew Instance
NotFresh HasNew Instance
К классу new () обращаются при первом вызове метода SessionSinglton, и последующие вызовы отражают, что экземпляр фактически извлекается из памяти.
Надеюсь, это поможет кому-то еще в будущем.