Embora essa seja uma pergunta geral, ela também é específica para um problema que estou enfrentando no momento. Atualmente, tenho uma interface especificada na minha solução chamada
public interface IContextProvider
{
IDataContext { get; set; }
IAreaContext { get; set; }
}
Essa interface é frequentemente usada em todo o programa e, portanto, tenho fácil acesso aos objetos de que preciso. No entanto, em um nível bastante baixo de uma parte do meu programa, preciso acessar outra classe que use o IAreaContext e realize algumas operações fora dele. Então, eu criei outra interface de fábrica para fazer essa criação chamada:
public interface IEventContextFactory
{
IEventContext CreateEventContext(int eventId);
}
Eu tenho uma classe que implementa o IContextProvider e é injetada usando o NinJect. O problema que tenho é que a área em que preciso usar esse IEventContextFactory tem acesso apenas ao IContextProvider e ela mesma usa outra classe que precisará dessa nova interface. Não quero instanciar essa implementação do IEventContextFactory no nível baixo e preferiria trabalhar com a interface IEventContextFactory . No entanto, eu também não quero injetar outro parâmetro através dos construtores apenas para que ele seja passado para a classe que precisa dele, ou seja,
// 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();
}
}
Portanto, minha pergunta principal é: isso seria aceitável ou é mesmo comum ou uma boa prática fazer algo assim (a interface estende outra interface):
public interface IContextProvider : IEventContextFactory
ou devo considerar melhores alternativas para alcançar o que preciso. Se eu não fornecer informações suficientes para dar sugestões, avise-me e posso fornecer mais.