添加到项目后,我需要自己初始化一些模块和类。
我正在寻找一种方法机制来在启动过程中调用例程(或其他方法),而无需显式调用它。
我尝试了以下方法,希望被MyInit
公开后,在启动时进行初始化。
优化是在第一次引用之前阻止创建MyInit
。
Partial Public Module InitModule
public MyInit As New MyStart()
Public Class MyStart
Public Sub New()
Debug.Writeline("Yes, init is executed")
End Sub
End Class
End Module
我有几个模块可以添加/链接到多个项目;当包含它们时,它们将提供跟踪,代码验证,版本控制等。其想法是,添加或删除主代码无需更改。
不要紧,它是类,子类还是函数:我希望它无需显式调用即可运行。
答案 0 :(得分:1)
感谢@Jimi的提示
在每个模块上,我都可以添加此部分代码段,扩展MyApplication
类并使用Startup
事件进行初始化。
此操作可以重复多次,me.Startup
将根据需要进行级联。
缺点:MyApplication
仅在Windows窗体上可用。
#if TARGET="winexe" then
Namespace My
Partial Friend Class MyApplication
Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As ApplicationServices.StartupEventArgs) Handles Me.Startup
My.Application.Log.WriteEntry($"Application start {My.Computer.Clock.ToString}")
' init module stuff
'...
End Sub
End Class
End Namespace
#end if
更新
我发现了一个非常简单明了的代码,可用于所有目标,而不仅仅是winexe(窗体)
这个想法是在初始化时强制创建类:
friend _startup_init as new startup_init with {.name="test"}
friend class startup_init
public name as string
public sub new()
'... do here your init,
' in my case a few addhandler to hook the master process
end sub
end class