汎用リポジトリを実装しましたが、エンティティ タイプが文字列である場合、実行時に適切なリポジトリを動的に作成する必要があります。
以下を使用してリポジトリを作成できました。
Assembly common = Assembly.LoadFrom(@"CommonLibrary.dll");
Type entityType = common.GetType("Models.OneOfManyEntities");
Type repoType = typeof(TradeSiftRepository<>).MakeGenericType(entityType);
var repo = Activator.CreateInstance(repoType, new UnitOfWork());
ただしrepo
、オブジェクトであり、実際にキャストしたいのですが、IRepository<TEntity>
試してみIRepository<entityType>
ましたが、正しくありません
これはレポのインターフェースです:
public interface IRepository<TEntity> : IDisposable where TEntity : class
{
IQueryable<TEntity> FindAll();
IQueryable<TEntity> Find(Expression<Func<TEntity, bool>> filter = null, Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null, string includeProperties = "");
TEntity FindById(object Id);
void Insert(TEntity entity);
void Update(TEntity entity);
void Delete(object id);
void Delete(TEntity entity);
}
リポジトリのアクティブ化されたインスタンスは正しい型ですが、Activator はオブジェクト型を返すため、メソッドを使用するにはそれをキャストする必要があります。