C # приведение унаследованного универсального интерфейса

У меня возникли некоторые проблемы, заставляя меня задуматься о создании интерфейса, который ямы придумали. Это's дизайн MVP для C # Windows Forms. У меня есть класс IView, который я реализую на своих классах формы. Там's также IPresenter, который я получаю в различных конкретных докладчиках. Каждый Presenter будет управлять IView по-разному в зависимости от роли, например, открывая диалоговое окно для ввода нового набора данных с помощью AddPresenter, в отличие от редактирования существующих данных с помощью EditPresenter, который будет предварительно загружать данные в форму. Каждый из них наследуется от IPresenter. Я хочу использовать код как таковой:

AddPresenter pres = new AddPresenter();

У меня в основном это работает, но эти докладчики и представления, которыми они управляют, объединены в плагины, которые загружаются после выполнения, что означает, что мне нужен класс Manager, который действует как интерфейс плагина "Режим" параметр. Этот параметр режима используется для фабричного метода, чтобы создать либо Добавить, либо Редактировать Презентатора, но поскольку вызов для показа диалогового окна выполняется позже, мне нужно выполнить вызов через интерфейс IPresenter, например так:

private IPresenter pres;
public ShowTheForm()
{
    pres.ShowDialog();
}

Сейчас я'У меня возникают проблемы, когда дело доходит до того, чтобы описать мою конкретную реализацию AddPresenter, скажем,прес член. Вот'урезанная упрощенная версия того, что у меня есть:

interface IView
{
    void ViewBlah();
}

interface IPresenter where V : IView
{
    void PresBlah();
}

class CView : IView
{
    public void ViewBlah()
    {        
    }
}

class CPresenter : IPresenter where T : IView
{
    public void PresBlah()
    {
    }
}

private void button3_Click(object sender, EventArgs e)
{
    CPresenter cpres = new CPresenter();
    IPresenter ipres = (IPresenter)cpres;
}

Это ошибка:

Unable to cast object of type 'CPresenter`1[MvpApp1.MainForm+CView]' to type 'IPresenter`1[MvpApp1.MainForm+IView]'.

И Presenter, и общая спецификация типов из того, что я могу сказать, являются подклассами интерфейсов, чтобы я мог 'не понимаю, почему это победитT Cast.

Какие-нибудь мысли?

Стив

Ответы на вопрос(2)

Ваш ответ на вопрос