Как правильно привести класс к абстрактному классу при использовании обобщений типов?

У меня есть следующие классы

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

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

У меня есть метод, который выглядит так (упрощенно)

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

Когда я вызываю это, используя экземпляры LoginPresenter

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

ЛинияActivator.CreateInstance(viewType) правильно разрешается в новых экземплярах моегоLoginView, тем не мениеcontrol as BaseView<BaseViewPresenter> не может сделать бросок правильно, поэтому возвращаетсяnull.

Есть ли способ правильно разыгратьcontrol вBaseView<BaseViewPresenter> без использования определенных типов дженериков?

посколькуLoginView наследует отBaseView<LoginPresenter>, а такжеLoginPresenter наследует отBaseViewPresenterЯ бы предположил, что есть способ конвертироватьLoginView вBaseView<BaseViewPresenter>.

Я застрял с использованием .Net 3.5

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

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