Reflection utilizzo property

domenica 07 luglio 2013 - 22.57
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Visual Studio 2010

massimo1965 Profilo | Junior Member

Ciao a Tutti
sto lavorando un po' con la reflection.. ma penso di essermi perso ..
Ho una dll ,che si chiama Gruppi.DLL ,che nella sua form "gruppi" ha 1 proprietà
Public Property DataAccess As UTLmanager.DataAccess Get Return _DataAccess End Get Set(value As UTLmanager.DataAccess) _DataAccess = value End Set End Property
(UTLmanager.DataAccess è una classe che mi sono creato per la gestione delle chiamate ai database)
Ora in un mio progetto istanzio questa dll

Dim asmb As Assembly = Assembly.LoadFrom(pAssemblyName) For Each t As Type In asmb.GetTypes() If t.BaseType.Equals(GetType(Form)) Then If String.Equals(t.Name, "gruppi", StringComparison.OrdinalIgnoreCase) Then Return t End If End If Next
e vorrei passargli anche il valore della property ma non capisco come...

Dim p1 As PropertyInfo = t.GetProperty("DataAccess")
p1.SetValue(_DataAccess, ???, Nothing)

chi mi da una mano ?
Grazie
M

Vinsent Profilo | Senior Member

Non sono una cima ed ho aspettato per rispondere.....magari nel frattempo hai risolto.
Comunque dovrebbe essere qualcosa del tipo:
p1.SetValue("nome della classe", "nuovo valore", Nothing)
Dove "nuovo valore" deve essere dello stesso tipo dichiarato nella proprietà.
Ciao

massimo1965 Profilo | Junior Member

ciao
si avevo provato ma mi dice che il tipo di destinazione non è uguale.
Per adesso ho risolto con il CallByName ma ogni tanto ci riprovo e posto il problema anche da altre parti.
Se trovo qualcosa ti dico.....
Grazie

Vinsent Profilo | Senior Member

Forse...può andare così:
Dim asmb As Assembly = Assembly.LoadFrom("test dll reflection.dll") For Each t As Type In asmb.GetTypes() If t.BaseType.Equals(GetType(Form)) Then If t.Name = "Form1" Then Dim Pinfo As PropertyInfo = t.GetProperty("Text") Dim Obj As Object Obj = Activator.CreateInstance(t) Pinfo.SetValue(Obj, "Form abc", Nothing) Dim mm As MethodInfo mm = t.GetMethod("apri") mm.Invoke(Obj, Nothing) End If End If Next
serve a cambiare il testo della Form della dll e ad aprirla.
Dove leggi "apri" è una "Public Sub" che esegue "Me.Show()".
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5