Вам не нужно ничего делать. Это просто работает, если user
действительно имеет тип User
, потому что компилятор выведет тип.
Но вы действительно должны изменить свою иерархию классов на это, то есть использовать универсальный параметр для уровня класса:
public class GenericRepository<TEntity> where TEntity : class
{
public void Insert(TEntity entity)
{
var collection = GetCollection<TEntity>();
collection.Save<TEntity>(entity);
}
}
public class UserRepository : GenericRepositry<User>
{
//...
}
Справочная информация:
Когда вы расширите свой репозиторий, вы увидите, почему:
public class GenericRepository
{
public void Insert<TEntity>(TEntity entity) where TEntity : class
{
var collection = GetCollection<TEntity>();
collection.Save<TEntity>(entity);
}
public void Delete<TEntity>(TEntity entity) where TEntity : class
{
// ...
}
}
Этот код был бы возможен, но не имел бы никакого смысла, поскольку каждый экземпляр хранилища должен отвечать только за один тип:
var genericRepository = new GenericRepository();
genericRepository.Insert(new User());
genericRepository.Delete(new Comment());