У меня есть несколько классов репозитория, которые выглядят примерно так: Обратите внимание, что я опустил некоторые методы; Я просто хочу, чтобы ты почувствовал вкус.
public class SuggestionRepository : ISuggestionRepository
{
private IUnitOfWork _unitOfWork;
public SuggestionRepository(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
public Suggestion Load(int id)
{
Suggestion suggestion;
suggestion = _unitOfWork.Load<Suggestion>(id);
return suggestion;
}
public IQueryable<Suggestion> All
{
get { return _unitOfWork.GetList<Suggestion>(); }
}
}
Вы представите количество повторяющегося кода между моими репозиториями.
Я хотел бы создать класс репозитория , который расширяется моими репозиториями, так что, надеюсь, мне не придется писать шаблонный код для каждого из них. Этот класс может выглядеть примерно так:
internal class Repository<T> where T : Entity
{
private IUnitOfWork _unitOfWork;
internal Repository<T>(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
public T Load(int id)
{
T t;
t = _unitOfWork.Load<T>(id);
return t;
}
public IQueryable<T> All
{
get { return _unitOfWork.GetList<T>(); }
}
}
Но Visual Studio вообще не проявляет к этому конструктору никакой любви. Он говорит «неожиданный токен» в скобках списка параметров, говорит, что не может получить доступ к нестатическому полю _unitOfWork в статическом контексте, и притворяется, что не знает, что такое параметр unitOfWork.
Очевидно, что универсальные классы могут иметь конструкторы, например, для создания списка . Так что же происходит?