Я рассматриваю один из двух интерфейсов IRepository, один из которых является потомком IQueryable, и тот, который содержит IQueryable.
Вот так:
public interface IRepository<T> : IQueryable<T>
{
T Save(T entity);
void Delete(T entity);
}
Или это:
public interface IRepository<T>
{
T Save(T entity);
void Delete(T entity);
IQueryable<T> Query();
}
Использование LINQ будет:
from dos
in ServiceLocator.Current.GetInstance<IRepository<DomainObject>>()
where dos.Id == id
select dos
Или...
from dos
in ServiceLocator.Current.GetInstance<IRepository<DomainObject>>().Query
where dos.Id == id
select dos
Мне нравится первый, но это проблематично издеваться. Как другие люди реализовали LINQable, mockingable repositories?