Хотя это общий вопрос, он также специфичен для проблемы, с которой я сейчас сталкиваюсь. В настоящее время у меня есть интерфейс, указанный в моем решении под названием
public interface IContextProvider
{
IDataContext { get; set; }
IAreaContext { get; set; }
}
Этот интерфейс часто используется во всей программе, и поэтому у меня есть легкий доступ к нужным объектам. Однако на довольно низком уровне части моей программы мне нужен доступ к другому классу, который будет использовать IAreaContext и выполнять над ним некоторые операции. Поэтому я создал еще один фабричный интерфейс для этого создания, который называется:
public interface IEventContextFactory
{
IEventContext CreateEventContext(int eventId);
}
У меня есть класс, который реализует IContextProvider и вводится с помощью NinJect. У меня проблема в том, что область, где мне нужно использовать этот IEventContextFactory, имеет доступ только к IContextProvider и сама использует другой класс, который будет нуждаться в этом новом интерфейсе. Я не хочу создавать экземпляр этой реализации IEventContextFactory на низком уровне и предпочел бы работать с интерфейсом IEventContextFactory повсюду. Однако я также не хочу вводить другой параметр через конструкторы, просто чтобы передать его классу, который нуждается в этом, т.е.
// 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();
}
}
Поэтому мой главный вопрос: приемлемо ли это, или это обычное дело или хорошая практика сделать что-то вроде этого (интерфейс расширяет другой интерфейс):
public interface IContextProvider : IEventContextFactory
или я должен рассмотреть лучшие альтернативы достижению того, что мне нужно. Если я не предоставил достаточно информации, чтобы дать предложения, дайте мне знать, и я могу предоставить больше.