Я довольно новичок в шаблоне репозитория и внедрении зависимостей. Почти все шаблоны репозитория, с которыми я сталкивался, имеют какой-то метод GetAll (), например:
public interface IRepository<T>
{
IQueryable<T> GetAll();
// other CRUD methods here...
}
У меня проблема с реализацией этого интерфейса и метода GetAll (), потому что я вызываю хранимую процедуру, для которой требуется параметр, который изменяется в зависимости от ввода пользователя. Я не хочу добавлять специальный метод к интерфейсу хранилища, например IQueryable<T> GetAll(string input);
. Я также не хочу добавлять параметр в конструктор, потому что он выглядит немного грязно для меня:
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(?)
Есть предложения?
UPDATE:
Я хотел бы повторно использовать интерфейс IRepository. Например, в одной программе я использую EF4 для реализации метода GetAll (), а в другой программе я использую стандарт ADO.NET для вызова хранимой процедуры, как в примере выше.