C#でのリフレクションを学習しようとしていますが、コードについてサポートが必要です。良いコード例/ガイドを見つけるのに苦労したので、コードがうまくできていない場合はお詫びします。
基本的に、特定のメソッド名について特定のアセンブリdllをチェックアウトしようとしています(パスとメソッド名は編集されています)。
問題は回線上で発生し、次のobject lateBoundObj = asm.CreateInstance(typeName);
ようになります。An object reference is required for the non-static field, method, or property...
私はこれが静的対非静的とnew Assembly
それらの線に沿ってまたは何かを作成することに関係していることを理解していますが、問題とそれを修正する方法を理解するのにいくらかの助けが必要です。
ありがとうございました!
public const string assemblyPath = @"<my file path>";
Assembly asm;
static void Main(string[] args)
{
//asm = new Assembly();
Console.Read();
MethodInfo mi;
object result = null;
object[] arguments = new object[] { "ABC123" };
try
{
Assembly assemblyInstance = Assembly.LoadFrom(assemblyPath);
Type[] types = assemblyInstance.GetTypes();
foreach (Type t in types)
{
mi = t.GetMethod("<my method name>");
if (mi != null)
{
string typeName = t.FullName;
object lateBoundObj = asm.CreateInstance(typeName);
result = t.InvokeMember("GetWeb", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Instance, null, lateBoundObj, arguments);
break;
}
}
//set return for find method
}
catch (Exception ex) { }
}