Aunque esta es una pregunta general, también es específica de un problema que estoy experimentando actualmente. Actualmente tengo una interfaz especificada en mi solución llamada
public interface IContextProvider
{
IDataContext { get; set; }
IAreaContext { get; set; }
}
Esta interfaz se usa a menudo en todo el programa y, por lo tanto, tengo fácil acceso a los objetos que necesito. Sin embargo, en un nivel bastante bajo de una parte de mi programa, necesito acceso a otra clase que usará IAreaContext y realizará algunas operaciones fuera de él. Así que he creado otra interfaz de fábrica para hacer esta creación llamada:
public interface IEventContextFactory
{
IEventContext CreateEventContext(int eventId);
}
Tengo una clase que implementa IContextProvider y se inyecta con NinJect. El problema que tengo es que el área donde necesito usar este IEventContextFactory solo tiene acceso al IContextProvider y usa otra clase que necesitará esta nueva interfaz. No quiero tener que instanciar esta implementación de IEventContextFactory en el nivel bajo y prefiero trabajar con la interfaz IEventContextFactory en todo momento. Sin embargo, tampoco quiero tener que inyectar otro parámetro a través de los constructores solo para que pase a la clase que lo necesita, es decir
// 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();
}
}
Entonces, mi pregunta principal es, ¿sería esto aceptable o es incluso una práctica común o buena hacer algo como esto (la interfaz se extiende a otra interfaz):
public interface IContextProvider : IEventContextFactory
o debería considerar mejores alternativas para lograr lo que necesito. Si no he proporcionado suficiente información para dar sugerencias, hágamelo saber y puedo proporcionar más.