Хоча це загальне питання, воно також характерне для проблеми, яку я зараз переживаю. Наразі в моєму рішенні називається інтерфейс, вказаний у моєму рішенні
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
чи варто розглянути кращі альтернативи для досягнення того, що мені потрібно. Якщо я не надав достатньо інформації, щоб дати пропозиції, дайте мені знати, і я можу надати більше.