Soy bastante nuevo en el patrón de repositorio y la inyección de dependencia. Casi todos los patrones del repositorio que he encontrado tiene algún tipo de GetAll() de este modo:Patrón de repositorio con procedimientos almacenados
public interface IRepository<T>
{
IQueryable<T> GetAll();
// other CRUD methods here...
}
Estoy teniendo un problema implementación de este método GetAll() de la interfaz y porque yo estoy llamando a un procedimiento almacenado que requiere un parámetro que cambia en función de la entrada de un usuario. No deseo agregar un método ad-hoc a la interfaz del repositorio, p. IQueryable<T> GetAll(string input);
. Asimismo, no quiero añadir un parámetro al constructor porque se ve un poco desordenado para mí:
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.
}
}
También estoy usando la inyección de dependencia por lo que habría que añadir un poco de la entrada dinámica al constructor cuando se enlaza :
Bind<IRepository<Entity>>().To<ConcreteRepository>().WithConstructorArgument(?)
¿Alguna sugerencia?
ACTUALIZACIÓN:
me gustaría volver a utilizar la interfaz IRepository. Por ejemplo, en un programa estoy usando EF4 para implementar el método GetAll(), y en otro programa estoy usando ADO.NET estándar para llamar a un procedimiento almacenado como el ejemplo anterior.
Su código se ve absolutamente bien y de acuerdo con el patrón de repositorio. –