I have two different GetConstructors(), one is returning what it should be returning the other however is returning nothing.
ItemName is BSRPTReportPerformanceSubcontractorRating
The first one which is returning what it properly should is:
Shared Function Invoke(ByVal Page As FXWBPag开发者_开发知识库e, 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" & 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 """ & strType & """. 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 """ & objType.ToString() & """. 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 """ & strType & """. Error: " & exep.Message)
End Try
Try
objPrint.DataBind()
Catch ex As Exception
Throw New Exception("Error occured on data binding level. Report """ & strType & """.", ex)
End Try
Catch ex As Exception
Throw ex
End Try
Return objPrint
End Function
The second which is returning Nothing is:
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" & 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 """ & strType & """. 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 """ & objType.ToString() & """. 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 """ & strType & """. Error: " & exep.Message)
End Try
Try
objPrint.DataBind()
Catch ex As Exception
Throw New Exception("Error occured on data binding level. Report """ & strType & """.", ex)
End Try
Catch ex As Exception
Throw ex
End Try
Return objPrint
End Function
Can anyone help me understand why the first one is working and the second one is returning nothing.
Moved from comments:
I see from your updated code that "FXWB.BSRPT" & ItemName is not your class but rather some third-party component, right? Then you should consult docs on this component or contact its author for getting information why your code is not working.
It looks like you have another argument in args(), have you verified that the types of the variables you have there match up, and there is actually a constructor which takes those 4 args?
精彩评论