私のプロジェクトで1つのDLLの参照を追加し、そのDLLのメソッド/クラスに正常にアクセスできました。リフレクション:オブジェクトの初期化
コードDLL内:(私はこのコードを変更するためのアクセス権を持っていない)
//Dll: myDllName
Namespace myNamespace
Public Class MyClass
Private Sub New(ByVal parameter1 As Int64)
//Set some values
End Sub
Public Shared Function MyPublicFunction(ByVal Parameter1 As Int64,ByVal Parameter2 As INt64,ByVal Parameter2 As Int64) As MyClass
Dim retMyClass As New MyClass(Parameter1)
//Set Other Values
Return retMyClass
End Function
Public Function Post() As Boolean
//Do some operation
End Function
End Class
End Namespace
私はDLLの上に呼ばれている私のコード:
Dim myObj As myDllName.myNamespace.MyClass
myObj = myDllName.myNamespace.MyClass.MyPublicFunction(Parameter1, Parameter2, Parameter3)
myObj.Prop1 = MyVal1
myObj.Prop2 = MyVal2
myObj.Prop3 = MyVal1
myObj.Post()
今私の要件は、私が達成したいですDLLの参照をプロジェクトに追加することなく、上記のタスクを実行できます。 私はこれを反射で達成しようとしました。
Dim assembly As Reflection.Assembly = Reflection.Assembly.LoadFile("..\\myDllName.dll")
Dim t As Type = assembly.GetType("myDllName.myNamespace.MyClass")
Dim woFacadeinst As Object = Activator.CreateInstance(t)
しかし、オブジェクトの初期化時に、それは私にそのコンストラクタタイプの
myDllName.myNamespace.MyClass見つからない
エラーがスローされます。
私のDLL参照クラスのプライベートNEWメソッドのためだと思います。 誰かがこれに助けてもらえますか?次のように代わりActivator.CreateInstance()
のパラメータ化コンストラクタ使用GetConstructors()
とInvoke()
については
の可能性のある重複した[タイプは、パラメータなしのコンストラクタを提供する場合どのようにチェックしますか?](https://stackoverflow.com/questions/4681031/how-do-i-check-if-a-type-provides-a -parameterless-コンストラクタ) –