Bien qu'il s'agisse d'une question générale, elle est également spécifique à un problème que je rencontre actuellement. J'ai actuellement une interface spécifiée dans ma solution appelée
public interface IContextProvider
{
IDataContext { get; set; }
IAreaContext { get; set; }
}
Cette interface est souvent utilisée tout au long du programme et j'ai donc un accès facile aux objets dont j'ai besoin. Cependant, à un niveau assez bas d'une partie de mon programme, j'ai besoin d'accéder à une autre classe qui utilisera IAreaContext et effectuera certaines opérations hors de celle-ci. J'ai donc créé une autre interface d'usine pour faire cette création appelée:
public interface IEventContextFactory
{
IEventContext CreateEventContext(int eventId);
}
J'ai une classe qui implémente IContextProvider et est injectée à l'aide de NinJect. Le problème que j'ai est que la zone où j'ai besoin d'utiliser ce IEventContextFactory a accès au IContextProvider uniquement et utilise elle-même une autre classe qui aura besoin de cette nouvelle interface. Je ne veux pas avoir à instancier cette implémentation d' IEventContextFactory au bas niveau et préfère plutôt travailler avec l' interface IEventContextFactory . Cependant, je ne veux pas non plus avoir à injecter un autre paramètre via les constructeurs juste pour le faire passer à la classe qui en a besoin, c'est-à-dire
// 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();
}
}
Donc ma question principale est, est-ce que cela serait acceptable ou est-ce même une pratique courante ou bonne de faire quelque chose comme ça (interface étendre une autre interface):
public interface IContextProvider : IEventContextFactory
ou devrais-je envisager de meilleures alternatives pour atteindre ce dont j'ai besoin. Si je n'ai pas fourni suffisamment d'informations pour faire des suggestions, faites-le moi savoir et je peux en fournir davantage.