Tôi khá mới đối với mẫu kho lưu trữ và chèn phụ thuộc. Hầu như tất cả các mô hình kho tôi đã đi qua có một số loại phương pháp GetAll() như sau:Mẫu lưu trữ với các thủ tục được lưu trữ
public interface IRepository<T>
{
IQueryable<T> GetAll();
// other CRUD methods here...
}
Tôi đang gặp một vấn đề thực hiện giao diện này và phương pháp GetAll() bởi vì tôi đang kêu gọi một stored procedure mà yêu cầu thông số thay đổi dựa trên dữ liệu nhập của người dùng. Tôi không muốn thêm một phương thức đặc biệt vào giao diện kho lưu trữ, ví dụ: IQueryable<T> GetAll(string input);
. Tôi cũng không muốn thêm một tham số để các nhà xây dựng vì nó trông giống một chút lộn xộn với tôi:
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.
}
}
Tôi cũng đang sử dụng dependency injection vì vậy tôi sẽ có thêm một số đầu vào động để các nhà xây dựng khi ràng buộc :
Bind<IRepository<Entity>>().To<ConcreteRepository>().WithConstructorArgument(?)
Mọi đề xuất?
UPDATE:
Tôi muốn tái sử dụng các giao diện IRepository. Ví dụ, trong một chương trình tôi đang sử dụng EF4 để thực hiện phương thức GetAll() và trong một chương trình khác, tôi đang sử dụng ADO.NET chuẩn để gọi một thủ tục lưu sẵn như ví dụ trên.
Mã của bạn trông hoàn toàn ổn định và theo mô hình repostitory. –