Imports System.Collections.Generic
Imports System.Reflection
Imports System.Text
Namespace ReflectionFacade
'''
''' Utility class for easy access to common System.Reflection features
'''
Public NotInheritable Class Reflector
Private Sub New()
End Sub
Private Const CommonFlags As BindingFlags = BindingFlags.[Public] Or BindingFlags.NonPublic
'''
'''
'''
Public Shared Function CreateInstance(type As Type, ParamArray args As Object()) As Object
Return Reflector.InvokeMember(type, Nothing, Nothing, Reflector.CommonFlags Or BindingFlags.CreateInstance Or BindingFlags.Instance, args)
End Function
'''
'''
'''
Public Shared Sub SetField(target As Object, fieldName As String, value As Object)
Reflector.InvokeMember(target.[GetType](), target, fieldName, Reflector.CommonFlags Or BindingFlags.SetField Or BindingFlags.Instance, value)
End Sub
'''
'''
'''
Public Shared Function GetField(target As Object, fieldName As String) As Object
Return Reflector.InvokeMember(target.[GetType](), target, fieldName, Reflector.CommonFlags Or BindingFlags.GetField Or BindingFlags.Instance)
End Function
'''
'''
'''
Public Shared Sub SetProperty(target As Object, propertyName As String, value As Object)
Reflector.InvokeMember(target.[GetType](), target, propertyName, Reflector.CommonFlags Or BindingFlags.SetProperty Or BindingFlags.Instance, value)
End Sub
'''
'''
'''
Public Shared Function GetProperty(target As Object, propertyName As String) As Object
Return Reflector.InvokeMember(target.[GetType](), target, propertyName, Reflector.CommonFlags Or BindingFlags.GetProperty Or BindingFlags.Instance)
End Function
'''
'''
'''
Public Shared Sub StaticSetField(type As Type, fieldName As String, value As Object)
Reflector.InvokeMember(type, Nothing, fieldName, Reflector.CommonFlags Or BindingFlags.SetField Or BindingFlags.[Static], value)
End Sub
'''
'''
'''
Public Shared Function StaticGetField(type As Type, fieldName As String) As Object
Return Reflector.InvokeMember(type, Nothing, fieldName, Reflector.CommonFlags Or BindingFlags.GetField Or BindingFlags.[Static])
End Function
'''
'''
'''
Public Shared Sub StaticSetProperty(type As Type, propertyName As String, value As Object)
Reflector.InvokeMember(type, Nothing, propertyName, Reflector.CommonFlags Or BindingFlags.SetProperty Or BindingFlags.[Static], value)
End Sub
'''
'''
'''
Public Shared Function StaticGetProperty(type As Type, propertyName As String) As Object
Return Reflector.InvokeMember(type, Nothing, propertyName, Reflector.CommonFlags Or BindingFlags.GetProperty Or BindingFlags.[Static])
End Function
'''
'''
'''
Public Shared Function CallMethod(target As Object, methodName As String, ParamArray args As Object()) As Object
Return Reflector.InvokeMember(target.[GetType](), target, methodName, Reflector.CommonFlags Or BindingFlags.InvokeMethod Or BindingFlags.Instance, args)
End Function
'''
'''
'''
Public Shared Function StaticCallMethod(type As Type, memberName As String, ParamArray args As Object()) As Object
Return Reflector.InvokeMember(type, Nothing, Nothing, Reflector.CommonFlags Or BindingFlags.InvokeMethod Or BindingFlags.[Static], args)
End Function
'''
'''
'''
Private Shared Function InvokeMember(type As Type, target As Object, memberName As String, flags As BindingFlags, ParamArray args As Object()) As Object
Return type.InvokeMember(memberName, flags, Nothing, target, args)
End Function
End Class
End Namespace