C # que lanza una interfaz genérica heredada

Estoy teniendo algunos problemas para ubicar una interfaz que se me haya ocurrido. Es un diseño de MVP para C # Windows Forms. Tengo una clase de IView que implemento en mis clases de formulario. También hay un IPresenter que derivo en varios presentadores específicos. Cada presentador administrará la vista IV de manera diferente según el rol, por ejemplo, abriendo el cuadro de diálogo para ingresar un nuevo conjunto de datos con un AddPresenter en lugar de editar los datos existentes con un EditPresenter que cargaría los datos en el formulario. Cada uno de estos heredará de IPresenter. Quiero usar el código como tal:

AddPresenter<ConcreteView> pres = new AddPresenter<ConcreteView>();

Básicamente tengo esto funcionando, pero estos presentadores y las vistas que administran están agrupados en complementos que se cargan después del tiempo de ejecución, lo que significa que necesito una clase Manager que actúe como la interfaz del complemento para tomar un parámetro de "modo". Este parámetro de modo se usa para un método de fábrica para crear el Presentador Agregar o Editar, pero debido a que la llamada para mostrar el cuadro de diálogo se realiza más adelante, entonces necesito hacer la llamada a través de la interfaz de IPresenter de esta manera:

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

Ahora tengo problemas en lo que respecta a la asignación de mi instanciación concreta de un AddPresenter, por ejemplo, al miembro 'pres'. Aquí hay una versión simplificada reducida de lo que tengo:

interface IView
{
    void ViewBlah();
}

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

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

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

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

Este es el error:

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

Tanto el presentador como la especificación de tipo genérico de lo que puedo decirle a las subclases de ARE de las interfaces, por lo que no puedo entender por qué no se emiten.

¿Alguna idea?

Steve

Respuestas a la pregunta(2)

Su respuesta a la pregunta