回答:
名前付きパラメーターを介してCreateInstanceに引数を渡す別の方法があります。
これに基づいて、配列をに渡すことができますCreateInstance
。これにより、0または複数の引数を持つことができます。
public T CreateInstance<T>(params object[] paramArray)
{
return (T)Activator.CreateInstance(typeof(T), args:paramArray);
}
ただし、Activator.CreateInstanceで引数を渡すと、パラメーターなしの作成と比べてパフォーマンスに大きな違いがあることに注意してください。
事前にコンパイルされたラムダを使用してオブジェクトを動的に作成するためのより良い代替手段があります。もちろん、パフォーマンスは常に主観的であり、価値があるかどうかは各ケースに明らかに依存します。
グラフは記事から取られたもので、1000コールあたりの時間をミリ秒で表しています。
Activator.CreateInstance
になります0.0035ms
、あなたのアプリケーションに応じて、これはさえ、すべてのパフォーマンス・テストで登録しないかもしれません- (または3.5マイクロ秒)。
Activator.CreateInstanceの代わりに、リンクされたURLのFastObjectFactoryは、Activatorよりも優れています(.NET 4.0以降、.NET 3.5より大幅に優れています。.NET4.5ではテスト/統計が行われていません)。統計、情報、コードについては、StackOverflowの投稿をご覧ください。
public class AssemblyLoader<T> where T:class
{
public void(){
var res = Load(@"C:\test\paquete.uno.dos.test.dll", "paquete.uno.dos.clasetest.dll")
}
public T Load(string assemblyFile, string objectToInstantiate)
{
var loaded = Activator.CreateInstanceFrom(assemblyFile, objectToInstantiate).Unwrap();
return loaded as T;
}
}