Creación de una instancia por reflection

20/03/2007 - 16:14 por Andoni | Informe spam
Hola a Todos:
Tengo un problema al migrar un código de la versión 1.1 a la 2.0

Tengo una clase:

Public Class Ejemplo
Inherits EjemploBase

#Region "Constructores"
Public Sub New()
MyBase.New()
Initialize()
End Sub

Public Sub New(ByVal pstrName As String)
MyBase.New(pstrName)
Initialize()
End Sub

Protected Sub New(ByVal pobjWareHouse As WareHouseBaseTable)
MyBase.New(pobjWareHouse)
Initialize()
End Sub

Private Sub Initialize()
//Sentencias
End Sub
end class

Ok.
En el MS Framework 1.1 el código que empleaba para generar una instancia es:

Public Shared Function CreateInstance(ByVal pobjObjectType As System.Type)
As Object
Dim arrConstructors() As ConstructorInfo =
pobjObjectType.GetConstructors(BindingFlags.Instance Or
BindingFlags.NonPublic Or BindingFlags.Public Or BindingFlags.Static)
If Not HelperFunctions.IsEmptyArray(arrConstructors) Then
For Each objConstructor As ConstructorInfo In arrConstructors
'Buscar y ejecutar el constructor sin parámetros
Dim arrParameters() As ParameterInfo =
objConstructor.GetParameters
If HelperFunctions.IsEmptyArray(arrParameters) Then
Return objConstructor.Invoke(Nothing)
End If
Next
End If
end if

Ahora con el Framework 2.0 me dispara una excepción del tipo :
{System.MemberAccessException}
pero la clase no es abstracta y los contructores son públicos.
Veo que el otro motivo es :
Que el constructor es un iniciador de la clase ¿?¿?
Me desconcierta un poco ese punto.
Por otro lado al recuperar los constructores me devuelve 4 y en la clase
solo hay 3 ...
¿Alguna idea al respecto?
Gracias de antemano.
 

Leer las respuestas

#1 Toni Recio
21/03/2007 - 11:53 | Informe spam
Un saludo,

He cogido tu clase del ejemplo, quitando las referencias a una clase base, y
variando el tipo de parámetro del segundo constructor, para posteriormente
obtener los constructores mediante el código que muestras, y no me ha dado
ningún problema con .NET 2.0. La información devuelta se corresponde
correctamente con los tres constructores ?¿?¿?¿

:-(

"Andoni" wrote:

Hola a Todos:
Tengo un problema al migrar un código de la versión 1.1 a la 2.0

Tengo una clase:

Public Class Ejemplo
Inherits EjemploBase

#Region "Constructores"
Public Sub New()
MyBase.New()
Initialize()
End Sub

Public Sub New(ByVal pstrName As String)
MyBase.New(pstrName)
Initialize()
End Sub

Protected Sub New(ByVal pobjWareHouse As WareHouseBaseTable)
MyBase.New(pobjWareHouse)
Initialize()
End Sub

Private Sub Initialize()
//Sentencias
End Sub
end class

Ok.
En el MS Framework 1.1 el código que empleaba para generar una instancia es:

Public Shared Function CreateInstance(ByVal pobjObjectType As System.Type)
As Object
Dim arrConstructors() As ConstructorInfo =
pobjObjectType.GetConstructors(BindingFlags.Instance Or
BindingFlags.NonPublic Or BindingFlags.Public Or BindingFlags.Static)
If Not HelperFunctions.IsEmptyArray(arrConstructors) Then
For Each objConstructor As ConstructorInfo In arrConstructors
'Buscar y ejecutar el constructor sin parámetros
Dim arrParameters() As ParameterInfo =
objConstructor.GetParameters
If HelperFunctions.IsEmptyArray(arrParameters) Then
Return objConstructor.Invoke(Nothing)
End If
Next
End If
end if

Ahora con el Framework 2.0 me dispara una excepción del tipo :
{System.MemberAccessException}
pero la clase no es abstracta y los contructores son públicos.
Veo que el otro motivo es :
Que el constructor es un iniciador de la clase ¿?¿?
Me desconcierta un poco ese punto.
Por otro lado al recuperar los constructores me devuelve 4 y en la clase
solo hay 3 ...
¿Alguna idea al respecto?
Gracias de antemano.

Preguntas similares