コンパクトの枠組み-方法を動的に作成しタイプとデフォルトのコンストラクタ?
-
09-06-2019 - |
質問
を使用しています。NET CF3.5.の形をしたいと思っていないデフォルトのコンストラクタに行きたいと思っていましたパス文字列の過負荷のコンストラクタです。いるのか?
コード:
Assembly a = Assembly.LoadFrom("my.dll");
Type t = a.GetType("type info here");
// All ok so far, assembly loads and I can get my type
string s = "Pass me to the constructor of Type t";
MyObj o = Activator.CreateInstance(t); // throws MissMethodException
解決
MyObj o = null;
Assembly a = Assembly.LoadFrom("my.dll");
Type t = a.GetType("type info here");
ConstructorInfo ctor = t.GetConstructor(new Type[] { typeof(string) });
if(ctor != null)
o = ctor.Invoke(new object[] { s });
他のヒント
@ジョナサンがコンパクトの枠組みをしてスリムにします。たいないというもののようなコードを掲載して一般的な重複は可能です。
ロリー Blyth一に記載のコンパクトの枠組みとして"ラッパシステム。NotImplementedExcetion".:)
Ok、ファンキーのヘルパーの方法だけを柔軟に活動するタイプされた配列のパラメータ:
static object GetInstanceFromParameters(Assembly a, string typeName, params object[] pars)
{
var t = a.GetType(typeName);
var c = t.GetConstructor(pars.Select(p => p.GetType()).ToArray());
if (c == null) return null;
return c.Invoke(pars);
}
お電話でのようになります:
Foo f = GetInstanceFromParameters(a, "SmartDeviceProject1.Foo", "hello", 17) as Foo;
をお渡ししますので組立、型の名前としては初の二つのパラメータは、すべてのコンストラクタのパラメータです。
この作品のために未審査):
Type t = a.GetType("type info here");
var ctors = t.GetConstructors();
string s = "Pass me to the ctor of t";
MyObj o = ctors[0].Invoke(new[] { s }) as MyObj;
の場合はタイプには複数のコンストラクタをしているいくつかの派手なフットワークを見つけることを承認文字列パラメータとします。
編集:で試験を行コードです。
Edit2: クリス'回答 の派手なフットワークさんたちが必要としています。;-)
所属していません StackOverflow