getConstructor ничего не возвращает

#asp.net #vb.net #reflection #getconstructor

#asp.net #vb.net #отражение #getconstructor

Вопрос:

У меня есть два разных getConstructors(), один возвращает то, что он должен возвращать, другой, однако, ничего не возвращает.

Имя_элемента равно bsrptreportperformancesubcontractor Рейтинг

Первый, который возвращает то, что он должен правильно:

 Shared Function Invoke(ByVal Page As FXWBPage, ByVal ItemName As String, ByVal intFolderID As Integer, ByVal strItemID As String, ByVal strDummy As String) As BSRPTPrint
        Dim objPrint As BSRPTPrint

    Dim objConstructor As System.Reflection.ConstructorInfo
    Dim objType As Type
    Dim strType As String = "FXWB.BSRPT" amp; ItemName
    Dim types() As Type = {GetType(FXWBPage), GetType(Integer), GetType(String)}
    Dim args() As Object = {Page, intFolderID, strItemID}

    Try
        Try
            objType = Type.GetType(strType, True)
        Catch ex As Exception
            Throw New Exception("Cannot reflect type """ amp; strType amp; """. Check Request parameter ""PrintItem"", it must take the name of correspondig BSRPT class without BSRPT prefix", ex)
        End Try

        objConstructor = objType.GetConstructor(types)

        If objConstructor Is Nothing Then
            Throw New Exception("Cannot invoke type """ amp; objType.ToString() amp; """. Check constructor parameter, it must be of FXWBPage type and not passed by ref.")
        End If

        Try
            objPrint = objConstructor.Invoke(args)
        Catch exep As Exception
            Throw New Exception("Cannot load report """ amp; strType amp; """. Error: " amp; exep.Message)
        End Try

        Try
            objPrint.DataBind()
        Catch ex As Exception
            Throw New Exception("Error occured on data binding level. Report """ amp; strType amp; """.", ex)
        End Try

    Catch ex As Exception

        Throw ex

    End Try


    Return objPrint
End Function
  

Второй, который ничего не возвращает, это:

 Shared Function Invoke(ByVal Page As FXWBPage, ByVal ItemName As String, ByVal intFolderID As Integer, ByVal intProjectID As Integer, ByVal strDummy As String, ByVal intSubcontractorID As Integer) As BSRPTPrint
    Dim objPrint As BSRPTPrint


    Dim objConstructor As System.Reflection.ConstructorInfo
    Dim objType As Type
    Dim strType As String = "FXWB.BSRPT" amp; ItemName
    Dim types() As Type = {GetType(FXWBPage), GetType(Integer), GetType(Integer), GetType(String), GetType(Integer)}
    Dim args() As Object = {Page, intFolderID, intProjectID, intSubcontractorID}

    Try
        Try
            objType = Type.GetType(strType, True)
        Catch ex As Exception
            Throw New Exception("Cannot reflect type """ amp; strType amp; """. Check Request parameter ""PrintItem"", it must take the name of correspondig BSRPT class without BSRPT prefix", ex)
        End Try

        objConstructor = objType.GetConstructor(types)

        If objConstructor Is Nothing Then
            Throw New Exception("Cannot invoke type """ amp; objType.ToString() amp; """. Check constructor parameter, it must be of FXWBPage type and not passed by ref.")
        End If

        Try
            objPrint = objConstructor.Invoke(args)
        Catch exep As Exception
            Throw New Exception("Cannot load report """ amp; strType amp; """. Error: " amp; exep.Message)
        End Try

        Try
            objPrint.DataBind()
        Catch ex As Exception
            Throw New Exception("Error occured on data binding level. Report """ amp; strType amp; """.", ex)
        End Try

    Catch ex As Exception

        Throw ex

    End Try


    Return objPrint
End Function
  

Кто-нибудь может помочь мне понять, почему первый работает, а второй ничего не возвращает.

Комментарии:

1. Какой тип objType в первую очередь? Я предполагаю, что ваш второй getConstructor ничего не возвращает только потому, что ваш класс objType не имеет соответствующего конструктора…

2. извиняюсь, я добавил строку кода для того, что такое objType

3. Тем не менее, это не то, о чем я спрашивал 🙂 Я понимаю, что это тип Type. Но для какого класса вы пытаетесь получить конструктор?

4. функция, в которой они содержатся, — это BSRPTPrint, обе функции, которые включают их, точно такие же, в любом коде нет разницы, кроме количества элементов массива в types()

5. @mattgcon: что хотел узнать @Sergey Kudriavtsev: есть ли у вашего класса "FXWB.BSRPT" amp; ItemName конструктор с параметрами (в таком порядке) : FXWBPage, Integer, Integer, String, Integer ?

Ответ №1:

Перенесено из комментариев:

Я вижу из вашего обновленного кода, что «FXWB.BSRPT» amp; ItemName — это не ваш класс, а скорее какой-то сторонний компонент, верно? Затем вам следует обратиться к документации по этому компоненту или связаться с его автором для получения информации, почему ваш код не работает.

Ответ №2:

Похоже, у вас есть еще один аргумент в args() , вы проверили, что типы переменных, которые у вас там есть, совпадают, и на самом деле есть конструктор, который принимает эти 4 аргумента?