Aunque esta es una pregunta general, también es específica de un problema que actualmente estoy experimentando. 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 realice 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 usando NinJect. El problema que tengo es que el área en la que necesito usar este IEventContextFactory tiene acceso al IContextProvider y utiliza otra clase que necesitará esta nueva interfaz. No quiero tener que crear una instancia de esta implementación de IEventContextFactory en el nivel bajo y preferiría trabajar con la interfaz IEventContextFactory en todo momento. Sin embargo, tampoco quiero tener que inyectar otro parámetro a través de los constructores 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();
}
}
Por lo tanto, mi pregunta principal es si sería aceptable o incluso es una práctica común o buena hacer algo como esto (la interfaz se extiende a otra una interfaz):
public interface IContextProvider : IEventContextFactory
o debería considerar mejores alternativas para lograr lo que necesito. Si no proporcioné suficiente información para dar sugerencias, avíseme y puedo proporcionar más.