Я пытаюсь понять последовательность выполнения в среде веб-приложения - в основном я использую модуль для различных служебных функций, включая ведение журнала и инициализацию различных глобальных / общих переменных. На сайте есть несколько отдельных страниц и несколько веб-сервисов.
У нас были некоторые проблемы с веб-сайтом, когда один из разработчиков предложил, чтобы фрагмент кода, который должен быть выполнен первым, чтобы инициализировать критическое свойство (что происходит в конструкторе модуля, само свойство НЕ определяется в модуль, а скорее на сторонних DLL, и модуль просто инициирует его в конструкторе) не выполняется в первую очередь. Причиной этого разработчика является то, что «конструктор модуля вызывается только тогда, когда ссылка на него найдена на открывшейся странице.
Итак, давайте представим, что в нашем веб-приложении есть 2 страницы. Только Страница2 имеет ссылку на MyModule. Таким образом, логика этого разработчика заключается в том, что если веб-сайт перезапускается и самый первый вызов - это Page1, которая не имеет каких-либо ссылок на модуль, и, следовательно, конструктор не вызывается, и, следовательно, он не инициализирует это свойство в третьей стороне. DLL. Из-за этого Page1 пытается использовать стороннюю DLL с неинициализированным свойством, и это не удается.
Мой счетчик: модуль является общим классом, и его конструктор, который также является общим, инициализируется при загрузке сборки веб-приложения. Согласно моему аргументу, не имеет значения, какая страница загружается первой, конструктор запускает сторонний инструмент при загрузке сборки и, следовательно, проблема в другом месте.
Я прав или я не прав?
Я не смог найти ответ на свой вопрос, просто некоторая информация о том, как Module похож на статические классы C # и, тем не менее, отличается.
Спасибо
Public Module MyModule
Sub New()
Log("something")
myThirdPartyDLLReference.InitializeVars()
...
End Sub
Private Sub Log(ByVal logMessage as string)
' Do some logic. Log some information
End Sub
End Module
Partial Class Page1
Inherits Page
Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
' Do some logic, no references to MyModule
End Sub
End Class
Partial Class Page2
Inherits Page
Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
' Do some logic, initialize MyModule
MyModule.Log("Page 2 initialized")
End Sub
End Class