Dobrý den, potřebuju poradit: vyrábím web, který používá zásuvné moduly. Toho dociluji tak, že mám nadefinovaný jmenný prostor CMS.Plugins, ve kterém jsou umístěny všechny moduly (jednotlivé VB soubory ve složce App_Code) jako třídy, které splňují interface IModule. Při načítání těchto modulů tedy pomocí následující funkce prohledám CMS.Plugins na všechny třídy:
Private Function ClassesInNamespace(ByVal [nameSpace] As String) As List(Of String)
Dim asm As Assembly = Assembly.GetExecutingAssembly()
Dim namespaceList As New List(Of String)()
Dim returnList As New List(Of String)()
For Each type As Type In asm.GetTypes()
If type.[Namespace] = [nameSpace] Then
namespaceList.Add(type.Name)
End If
Next
For Each className As String In namespaceList
returnList.Add(className)
Next
Return returnList
End Function
Jak jste si jistě všimli, výsledek se mi vrátí v kolekci názvů typů (CMS.Plugins.Plugin1, CMS.Plugins.Plugin2...) Výstup ale potřebuji mít jako kolekci IModule, přičemž každý prvek bude představovat nadimenzovanou a zinicializovanou proměnnou. To dělám takto:
Dim m As List(Of String) = ClassesInNamespace("CMS.Plugins")
Dim LoadModules As New List(Of IModule)
For Each s As String In m
Dim t As Type = Type.GetType(s)
Dim modul As New t()
LoadModules.Add(modul)
Next s
Problém ale nastává na tomto řádku: Dim modul As New t(). Bohužel nevím jakým způsobem se dá nadimenzovat proměnná s typem v proměnné hodnoty Type. Neví někdo, jak na to? Díky moc
|