リフレクションを使用してジェネリック型のインスタンスを作成しています。
public interface IModelBuilder<TModel>
{
TModel BuildModel();
}
public class MyModel
{
public string Name { get; set; }
}
public class MyModelBuilder : IModelBuilder<MyModel>
{
public MyModel BuildModel()
{
throw new NotImplementedException();
}
}
実行時にわかっているのは、モデルの Type だけですMyModel
。次のように、関連するモデル ビルダーのインスタンスを見つけることができます。
var modelBuilders = from t in Assembly.GetExecutingAssembly().GetTypes()
from i in t.GetInterfaces()
where i.IsGenericType
&& i.GetGenericTypeDefinition() == typeof(IModelBuilder<>)
&& i.GetGenericArguments()[0] == modelType
select t;
var builder = Activator.CreateInstance(modelBuilders.First());
IModelBuilder<TModel>
しかし、どのようにインスタンスをキャストして、の結果を呼び出して操作できるかわかりませんBuildModel()
。