Шаблон репозитория с хранимыми процедурами

Я новичок в шаблоне репозитория и внедрении зависимостей. Почти все шаблоны репозитория, с которыми я столкнулся, имеют своего рода метод GetAll (), например:

public interface IRepository<T>
{
    IQueryable<T> GetAll();
    // other CRUD methods here...
}

У меня проблема с реализацией этого интерфейса и метода GetAll (), потому что я вызываю хранимую процедуру, для которой требуется параметр, который изменения на основе ввода пользователя. Я не хочу добавлять специальный метод в интерфейс репозитория, например. IQueryable GetAll (строковый ввод); . Я также не хочу добавлять параметр в конструктор, потому что мне это кажется немного беспорядочным:

public class ConcreteRepository : IRepository<Entity>
{
    string _storedProcedureInput;

    public ConcreteRepository(string storedProcedureInput)
    {
        _storedProcedureInput = storedProcedureInput;

    public IQueryable<Entity> GetAll()
    {
        // Call to stored procedure goes here passing in the 
        // _storedProcedureInput variable.
    }
}

Я также использую внедрение зависимостей, поэтому мне пришлось бы добавить динамический ввод в конструктор при связывании:

Bind<IRepository<Entity>>().To<ConcreteRepository>().WithConstructorArgument(?)

Есть предложения?

ОБНОВЛЕНИЕ:

Я бы хотел повторно использовать интерфейс IRepository. Например, в одной программе я использую EF4 для реализации метода GetAll (), а в другой программе я использую стандартный ADO.NET для вызова хранимой процедуры, как в примере выше.

5
задан Drew 9 October 2013 в 03:04
поделиться