Wie kann man eine Klasse bei Verwendung von Typgenerika korrekt in eine abstrakte Klasse umwandeln?

Ich habe die folgenden Klassen

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

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

Ich habe eine Methode, die so aussieht (vereinfacht)

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>;
}

Wenn ich dies mit einer Instanz von LoginPresenter aufrufe

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

Die LinieActivator.CreateInstance(viewType) wird korrekt in eine neue Instanz von my @ aufgelöLoginView, jedochcontrol as BaseView<BaseViewPresenter> kann die Besetzung nicht richtig machen, gibt also @ zurünull.

Gibt es eine Möglichkeit, das @ richtig zu besetzecontrolinBaseView<BaseViewPresenter> ohne Verwendung bestimmter Typgenerika?

Schon seitLoginView erbt vonBaseView<LoginPresenter>, undLoginPresenter erbt vonBaseViewPresenter, Ich würde annehmen, dass es eine Möglichkeit gibt, @ zu konvertierLoginView zuBaseView<BaseViewPresenter>.

Ich bin fest mit .Net 3.5

Antworten auf die Frage(3)

Ihre Antwort auf die Frage