¿Cómo emitir correctamente una clase a una clase abstracta cuando se usan tipos genéricos?

Tengo las siguientes clases

public abstract class BaseViewPresenter { }
public abstract class BaseView<T> : UserControl
    where T : BaseViewPresenter { }

public class LoginPresenter : BaseViewPresenter { }
public partial class LoginView : BaseView<LoginPresenter> {  }

Tengo un método que se ve así (simplificado)

public BaseView<BaseViewPresenter> Resolve(BaseViewPresenter model)
{
    var type = model.GetType();
    var viewType = _dataTemplates[type];

    // Correctly creates BaseView object
    var control = Activator.CreateInstance(viewType);

    // Fails to cast as BaseView<BaseViewPresenter> so returns null
    return control as BaseView<BaseViewPresenter>;
}

Cuando llamo a esto usando instancias de LoginPresenter

var login = new LoginPresenter();
var ctl = Resolve(login);

La líneaActivator.CreateInstance(viewType) resuelve correctamente en una nueva instancia de miLoginView, sin embargocontrol as BaseView<BaseViewPresenter> no puede hacer el lanzamiento correctamente, por lo que vuelvenull.

¿Hay alguna manera de emitir correctamente elcontrol dentroBaseView<BaseViewPresenter> sin usar genéricos de tipo específico?

Ya queLoginView hereda deBaseView<LoginPresenter>yLoginPresenter hereda deBaseViewPresenter, Supongo que hay una manera de convertirLoginView aBaseView<BaseViewPresenter>.

Estoy atascado con el uso de .Net 3.5

Respuestas a la pregunta(3)

Su respuesta a la pregunta