Sebbene questa sia una domanda generale, è anche specifica per un problema che sto vivendo. Attualmente 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 abbastanza basso di una parte del mio programma, ho bisogno di accedere a un'altra classe che utilizzerà IAreaContext ed eseguirà alcune operazioni al di fuori di esso. Quindi ho creato un'altra interfaccia di fabbrica 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 devo utilizzare questo IEventContextFactory ha accesso solo a IContextProvider e utilizza essa stessa un'altra classe che avrà bisogno di questa nuova interfaccia. Non voglio istanziare questa implementazione di IEventContextFactory a basso livello e preferirei lavorare con l' interfaccia IEventContextFactory in tutto. Tuttavia, anche io non voglio 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 comune o buona pratica fare qualcosa del genere (l'interfaccia estende un'altra interfaccia):
public interface IContextProvider : IEventContextFactory
o dovrei considerare alternative migliori per raggiungere ciò di cui ho bisogno. Se non ho fornito abbastanza informazioni per dare suggerimenti, fammelo sapere e posso fornire di più.