Я пытаюсь создать своего рода интерфейс мастера / детализации, используя шаблон MVP. У меня есть обычные подозреваемые:
interface IMainView{}
class MainView: Form, IMainView{}
interface IMainPresenter{}
class MainPresenter{}
// Numerous domain objects
У меня также есть UserControl, который также является представлением своей собственной триады MVP:
interface ISubView{}
class SubView: UserControl, ISubView{}
interface ISubPresenter{}
class SubPresenter{}
MainPresenter создает и экземпляр SubPresenter, который, в свою очередь, создает экземпляр SubView. Моя проблема в том, что представления не содержат ссылок друг на друга и даже не знают, что существуют. Они знают только о своих собственных докладчиках, но я хочу прикрепить одно представление, которое является UserControl, к другому представлению, которое является формой. Возможно ли это сделать и при этом поддерживать невежество друг друга по отношению друг к другу?
До этого момента все представления выставляли свойства, необходимые каждому докладчику, в качестве системных типов, поэтому докладчики не будут затронуты, если ListBox изменится на ComboBox или RadioGroup. Я бы хотел оставить это так, если это возможно, но я готов нарушить эту модель, если у меня нет другого выбора.
Моими причинами для этого является то, что MainView представляет пользователю коллекцию объектов. Каждый объект может быть одним из нескольких (более 50) разных классов. Все будут реализовывать общий интерфейс, но пользовательский интерфейс для управления каждым объектом будет зависеть от базового класса.
Кстати, это приложение Winforms, предназначенное для .NET 2.0 (хотя оно скомпилировано как C # 3.0)