私はインスタンスの作成時にEntity Framework Modelを渡す次のクラスを持っています。実行時にC#を使用してクラスの新しいインスタンスを作成するにはどうすればよいですか?
public class TableMapper<TSource>
{
protected IQueryExtractor QueryExtractor { get; set; }
protected string TableAliasPrefix { get; private set; }
public TableMapper(IQueryExtractor queryExtractor, string tableAliasPrefix = null)
{
QueryExtractor = queryExtractor;
TableAliasPrefix = tableAliasPrefix;
}
public IReportRelation GetForeignRelation<TProperty>(Expression<Func<TSource, TProperty>> property)
{
return new ReportRelation
{
Column = GetReportColumn(null, Self, property),
TableName = this.Table(),
TableAlias = this.GetSqlAlias(),
ModelType = typeof(TSource),
QueryExtractor = this.QueryExtractor
};
}
...
...
...
}
私はClient
は、Entity Frameworkの6モデルであることに注意してくださいので
var clientMapper = new TableMapper<Client>(QueryExtractor, "Client");
var = clientMapper.GetForeignRelation(x => x.Id);
のような他のクラスから、まだこの上のクラスを呼び出します。
私GetForeignRelation
方法の中から、私はので、私は、実行時にTableMapper
クラスの新しいインスタンスを作成することができClient
または<TSource>
のタイプを設定します。
ここでは、実行時に新しいインスタンスを作成しようとしました。
var RunTimeModel = Activator.CreateInstance(relationsMapping.ModelType);
var RunTimeMapper = new TableMapper<RunTimeModel>(relationsMapping.QueryExtractor, relationsMapping.TableAlias);
しかし、それは私にエラーを与えています。
RunTimeModel
が見つかりませんでした型または名前空間名は(あなた がusingディレクティブまたはアセンブリ参照が不足している?)
どのように私が正しく実行時に同じクラスの新しいインスタンスを作成することができます時間?
あなたがしてTSOURCEのクラス名を取得します
私はあなたが私のコードで見ることができるような変数 'relationsMapping.ForeignRelation.ModelType'に' 'typeof演算(TSOURCE)格納します。それを 'Activator.CreateInstance()'に渡しますが、それは私のためには機能しません。私の質問 – Jaylen
のエラーを参照してください私はあなたがコード化したものに似ています。そこで、私は 'ReportRelation'のインスタンスを作成する必要があります。' 'はEntity Frameworkモデルです –
Jaylen