Rất có thể nhưng bạn không phải sử dụng giao diện chung hoặc thực hiện nhiều thao tác truyền. Sử dụng giao diện ...
public interface IRepository
{
public object Get(int id); // or object id
public void Save(object obj);
}
public class CustomerRepository : IRepository
{
public object Get(int id) { // implementation }
public void Save(object obj) { // implementation }
}
Mã hoạt động tốt nhưng gọi này phải đưa đối tượng vào đúng loại và phương pháp triển khai cụ thể phải kiểm tra loại và loại trừ ngoại lệ. Đúc trực tiếp là yêu cầu ngoại lệ thời gian chạy vì vậy tôi sẽ tránh phương pháp này.
Cách tiếp cận tôi khuyên bạn không nên để kho lưu trữ của bạn triển khai giao diện chung. Thay vào đó, họ phải thực hiện các phương thức thường được đặt tên theo quy ước.
public class CustomerRepository
{
public Customer Get(int id) { // implementation }
public void Save(Customer entity) { // implementation }
}
public class EmployeeRepository
{
public Employee Get(int id) { // implementation }
public void Save(Employee entity) { // implementation }
}
Đã chỉnh sửa để thêm: Tôi đọc lại câu trả lời được liên kết. Đoạn văn cuối cùng mất tôi nhưng tôi có thể mở rộng một chút về việc sử dụng DI. Trong hầu hết các trường hợp, sẽ không có ý nghĩa khi sử dụng DI để tiêm một kho lưu trữ "chung chung" (trong trường hợp này có nghĩa là bắt nguồn từ một giao diện chung). Ngoài các phương thức phổ biến, một kho lưu trữ sẽ có các phương thức cụ thể của thực thể như GetCustomersWithPastDueAccounts
. Bạn có thể định nghĩa một ICustomerRepository với phương thức đó và yêu cầu CustomerRepository của bạn thực hiện điều đó. Sau đó, bạn có thể sử dụng tiêm phụ thuộc để tiêm CustomerRepository khi chạy. Không có gì sai với điều đó, nhưng theo kinh nghiệm của tôi, nó khá hiếm khi bạn có nhiều triển khai của một kho lưu trữ, do đó, có rất ít điểm khi làm như vậy.
Nguồn
2009-07-08 19:52:39
Nhưng với phương pháp thứ hai của bạn, tôi không bị mất khả năng tiêm phụ thuộc? –
Bạn luôn có thể thực hiện việc tiêm phụ thuộc thủ công. Nhưng bạn nói đúng, bạn sẽ không thể sử dụng một khuôn khổ DI để làm tiêm phụ thuộc. Tôi sẽ chỉnh sửa câu trả lời của mình và thêm giải thích thêm. –
Về cơ bản, có một giao diện cho mỗi kho lưu trữ và có thể được sử dụng cho DI. Đối với 10 thực thể, 10 giao diện, với ít nhất 10 cài đặt. Âm thanh phải không? –