Repositório genérico - IRepository <T> ou IRepository

Eu vi duas abordagens diferentes para criar repositórios genéricos. Quais são as diferenças entre essas duas abordagens (prós e contras)? Por favor diregard diferença nos métodos porque eu estou interessado em diferença entre

 public interface IRepository<T> where T : class

e

 public interface IRepository : IDisposable

Existe alguma diferença na funcionalidade, flexibilidade, teste de unidade ...? O que vou ganhar ou perder?
Existe alguma diferença de como eles são registrados nas estruturas de injeção de dependência?

Opção 1

 public interface IRepository<T> where T : class
 {
       T Get(object id);
       void Attach(T entity);
       IQueryable<T> GetAll();
       void Insert(T entity);
       void Delete(T entity);
       void SubmitChanges();
 }

opção 2

 public interface IRepository : IDisposable
    {
        IQueryable<T> GetAll<T>();
        void Delete<T>(T entity);
        void Add<T>(T entity);
        void SaveChanges();
        bool IsDisposed();
    }

questionAnswers(1)

yourAnswerToTheQuestion