Meskipun ini adalah pertanyaan umum, ini juga khusus untuk masalah yang saya alami saat ini. Saat ini saya memiliki antarmuka yang ditentukan dalam solusi saya yang disebut
public interface IContextProvider
{
IDataContext { get; set; }
IAreaContext { get; set; }
}
Antarmuka ini sering digunakan di seluruh program dan karenanya saya memiliki akses mudah ke objek yang saya butuhkan. Namun pada tingkat yang cukup rendah dari bagian dari program saya, saya perlu akses ke kelas lain yang akan menggunakan IAreaContext dan melakukan beberapa operasi dari itu. Jadi saya telah membuat antarmuka pabrik lain untuk melakukan kreasi yang disebut:
public interface IEventContextFactory
{
IEventContext CreateEventContext(int eventId);
}
Saya memiliki kelas yang mengimplementasikan IContextProvider dan disuntikkan menggunakan NinJect. Masalah yang saya miliki adalah bahwa area di mana saya perlu menggunakan IEventContextFactory ini hanya memiliki akses ke IContextProvider dan menggunakan kelas lain yang membutuhkan antarmuka baru ini. Saya tidak ingin harus instantiate implementasi IEventContextFactory ini pada tingkat rendah dan lebih suka bekerja dengan antarmuka IEventContextFactory di seluruh. Namun saya juga tidak mau harus menyuntikkan parameter lain melalui konstruktor hanya untuk diteruskan ke kelas yang membutuhkannya yaitu
// 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();
}
}
Jadi pertanyaan utama saya adalah, apakah ini dapat diterima atau bahkan praktik umum atau baik untuk melakukan sesuatu seperti ini (antarmuka memperluas antarmuka lainnya):
public interface IContextProvider : IEventContextFactory
atau haruskah saya mempertimbangkan alternatif yang lebih baik untuk mencapai apa yang saya butuhkan. Jika saya belum memberikan informasi yang cukup untuk memberi saran, beri tahu saya dan saya dapat memberikan lebih banyak.