Anche se questa è una domanda generale, è anche specifica di un problema che sto attualmente vivendo. Al momento ho un'interfaccia specificata nella mia soluzione chiamata
public interface IContextProvider
{
IDataContext { get; set; }
IAreaContext { get; set; }
}
Questa interfaccia è spesso utilizzata in tutto il programma e quindi ho un facile accesso agli oggetti di cui ho bisogno. Tuttavia, a un livello piuttosto basso di una parte del mio programma ho bisogno di accedere ad un'altra classe che userà IAreaContext ed eseguire alcune operazioni su di essa. Così ho creato un'altra interfaccia factory per fare questa creazione chiamata:
public interface IEventContextFactory
{
IEventContext CreateEventContext(int eventId);
}
Ho una classe che implementa IContextProvider e viene iniettata usando NinJect. Il problema che ho è che l'area in cui ho bisogno di usare questo IEventContextFactory ha accesso solo a IContextProvider e se stessa utilizza un'altra classe che avrà bisogno di questa nuova interfaccia. Non voglio dover istanziare questa implementazione di IEventContextFactory al livello basso e preferirei lavorare con l'interfaccia IEventContextFactory . Tuttavia, non voglio neanche dover iniettare un altro parametro attraverso i costruttori solo per farlo passare alla classe che ne ha bisogno, cioè
// 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();
}
}
Quindi la mia domanda principale è, sarebbe accettabile o è addirittura normale o buona pratica fare qualcosa del genere (l'interfaccia estende un'altra interfaccia):
public interface IContextProvider : IEventContextFactory
o dovrei considerare alternative migliori per ottenere ciò di cui ho bisogno. Se non ho fornito informazioni sufficienti per dare suggerimenti fammelo sapere e posso fornire di più.