Mặc dù đây là một câu hỏi chung nhưng nó cũng cụ thể cho một vấn đề tôi hiện đang gặp phải. Tôi hiện có một giao diện được chỉ định trong giải pháp của tôi được gọi là
public interface IContextProvider
{
IDataContext { get; set; }
IAreaContext { get; set; }
}
Giao diện này thường được sử dụng trong suốt chương trình và do đó tôi có thể dễ dàng truy cập vào các đối tượng tôi cần. Tuy nhiên, ở mức độ khá thấp của một phần chương trình của tôi, tôi cần truy cập vào một lớp khác sẽ sử dụng IAreaContext và thực hiện một số thao tác tắt nó. Vì vậy, tôi đã tạo một giao diện nhà máy khác để thực hiện việc tạo này được gọi là:
public interface IEventContextFactory
{
IEventContext CreateEventContext(int eventId);
}
Tôi có một lớp thực hiện IContextProvider và được tiêm bằng NinJect. Vấn đề tôi gặp phải là khu vực tôi cần sử dụng IEventContextFactory này chỉ có quyền truy cập vào IContextProvider và chính nó sử dụng một lớp khác sẽ cần giao diện mới này. Tôi không muốn phải khởi tạo việc triển khai IEventContextFactory ở mức độ thấp và muốn làm việc với giao diện IEventContextFactory xuyên suốt. Tuy nhiên tôi cũng không muốn phải tiêm một tham số khác thông qua các hàm tạo chỉ để nó được truyền qua lớp cần nó, tức là
// example of problem
public class MyClass
{
public MyClass(IContextProvider context, IEventContextFactory event)
{
_context = context;
_event = event;
}
public void DoSomething()
{
// the only place _event is used in the class is to pass it through
var myClass = new MyChildClass(_event);
myClass.PerformCalculation();
}
}
Vì vậy, câu hỏi chính của tôi là, điều này có thể được chấp nhận hay thậm chí là thông thường hoặc thực hành tốt để làm một cái gì đó như thế này (giao diện mở rộng giao diện khác):
public interface IContextProvider : IEventContextFactory
hoặc tôi nên xem xét các lựa chọn thay thế tốt hơn để đạt được những gì tôi cần. Nếu tôi chưa cung cấp đủ thông tin để đưa ra gợi ý cho tôi biết và tôi có thể cung cấp thêm.