我有点困惑自己。我有一个IUnitOfWork
,IGenericRepostory
和IPerson
:
public interface IUnitOfWork<C> : IDisposable
where C : DbContext, new()
{
C _db { get; }
IGenericRepository<C, IPerson> PersonRepository { get; }
}
和
public interface IGenericRepository<C, TEntity>
where TEntity : class
where C : DbContext, new()
我试图实施它们:
class UnitOfWork : IUnitOfWork<RetailDB>
{
public RetailDB _db { get; private set; }
private GenericRepository<Person> _personRepository;
public UnitOfWork(RetailDB db)
{
_db = db;
}
public IGenericRepository<RetailDB, IPerson> PersonRepository
{
get
{
if (_personRepository == null)
_personRepository = new GenericRepository<Person>(_db);
return _personRepository;
}
}
}
和
public class GenericRepository<TEntity> : IGenericRepository<RetailDB, TEntity>
where TEntity : class
{
}
我觉得这应该有效,但当我返回UnitOfWork
时,我在_personRepository
收到错误:
Cannot implicitly convert type 'GenericRepository<Person>' to 'IGenericRepository<RetailDB,IPerson>'. An explicit conversion exists (are you missing a cast?)
我对这种更大规模的继承感到陌生,我确定我错过了一些明显的东西。我想,因为GenericRepository
声明了IGenericRepository
C
的具体类型,所以一切都应该正确。 Person
正确继承IPerson
。非常感谢任何指导