我已经实现了一个通用存储库,但需要在运行时动态创建适当的存储库,将实体类型作为字符串。
我设法使用以下方法创建了存储库:
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);
}
repo 的激活实例是正确的类型,但 Activator 返回一个对象类型,因此我需要对其进行强制转换以使用这些方法。