Newsgroup: it.comp.lang.visual-basic
Titolo: [NET] Reflection e plugin

Io mi sto incartando...e commetto un errore che non riesco a vedere!
Vediamo se scrivendo....
Sto programmando dei plugin....
interfaccia pubblica---> Plugin
ossia
Public Class Plug1
    Implements InterfacciaPlugin.IPlugIn
    Dim T As Object
    Public ReadOnly Property AutorePlugin() As String Implements
InterfacciaPlugin.IPlugIn.AutorePlugin
        Get
            Return "Wodkino nazionale"
        End Get
    End Property
.....................
compilato come libreria di classi ed ottenuto la dll
poi...il progetto di test
normale windows application
Form con un pulsante
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
        TrovaPlugin()
    End Sub
poi la sub
    Private Sub TrovaPlugin()
        Dim CercaIn As String
        'cartella dove si parcheggiano gli assembly
        CercaIn = System.AppDomain.CurrentDomain.BaseDirectory
        ' cerca tutte le dll
        Dim Dll() As String = IO.Directory.GetFiles(CercaIn, "*.dll")
        Dim Fdll As String
        'Itera per tutti i file dll
        For Each Fdll In Dll
            'cerca nell'assembly
            Dim mAssembly As Reflection.Assembly
            mAssembly = Assembly.LoadFile(Fdll)
            Dim Tipo As Type
            For Each Tipo In mAssembly.GetTypes
                If Not (Tipo.GetInterface("InterfacciaPlugin.IPlugIn")
Is Nothing) Then
                    'siamo nel nostro plugin
                    Try
                        Dim z() As PropertyInfo
                        Dim t As PropertyInfo
                        z = Tipo.GetProperties
                        For Each t In z
                            Console.WriteLine(t.Name & " " &
t.PropertyType.ToString)
                        Next
                    Catch ex As ArgumentException
                        Stop
                    Catch ex As TargetException
                        Stop
                    Catch ex As TargetParameterCountException
                        Stop
                    Catch ex As MethodAccessException
                        Stop
                    End Try
                End If
            Next
        Next
    End Sub
...e correttamente mi trova i nomi delle proprietà!
SOLO CHE NON RIESCO a  leggerle queste proprietà!
AutorePlugin mi dovrebbe riportare il valore "Wodkino nazionale"
MA
 Console.WriteLine(t.GetValue(t, Nothing))
errore:
L'oggetto non corrisponde al tipo di destinazione
ho provato tutte le combinazioni...ma mi sfugge ancora qualcosa!
Ho pensato anche....non mi riporta un valore perchè la classe non è
istanziata!!!
allora ho modificato aggiungendo
                    'siamo nel nostro plugin
                    Activator.CreateInstance(Tipo)
                     Try
ma nulla ....non riesco a leggere questa proprietà...di cui mi trova
correttamente nome e tipo!
GRRRRRRRRRRRR
non ho più idee!!!
sigh!


wrote:
zac
Una giornata all'aria aperta....una buona camminata.....
15 minuti al pc....
e la porta si schiude
i miei neuroni (i 2 che ho) dialogano fra loro:
Come stra<biiiip> fai a leggere una proprietà di una istanza che
ancora non esiste?
L'avevo fatto!
No caro mio!...proprio no!
 la sintassi corretta è
       Istanza = mAssembly.CreateInstance(Tipo.FullName, True)
 dentro un assembly ci sono delle classi...uno o più....quindi devi
comunicare a VB che vuoi istanziarne una....esattamente come se
sapessi prima quale è!(anche se non lo sai)
ti mancava la proprietà Fullname dell'assembly!!!
Te capì testina???
Vabbe ora funziona!!!
sto invecchiando male!!!...non ho più i neuroni elastici come un
tempo! (se poi litigano fra loro!!!)

 tempo! (se poi litigano fra loro!!!)
Mi preoccupa il tuo sdoppiamento di personalità :-)
Nicola