Como converter corretamente uma classe para uma classe abstrata ao usar tipos genéricos?
Eu tenho as seguintes aulas
public abstract class BaseViewPresenter { }
public abstract class BaseView<T> : UserControl
where T : BaseViewPresenter { }
public class LoginPresenter : BaseViewPresenter { }
public partial class LoginView : BaseView<LoginPresenter> { }
Eu tenho um método que se parece com isso (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>;
}
Quando eu chamo isso usando uma instância do LoginPresenter
var login = new LoginPresenter();
var ctl = Resolve(login);
A linhaActivator.CreateInstance(viewType)
resolve corretamente em uma nova instância do meuLoginView
, Contudocontrol as BaseView<BaseViewPresenter>
não pode fazer o elenco corretamente, então retornanull
.
Existe uma maneira de transmitir corretamente ocontrol
para dentroBaseView<BaseViewPresenter>
sem usar tipos genéricos específicos?
Desde aLoginView
herda deBaseView<LoginPresenter>
eLoginPresenter
herda deBaseViewPresenter
, Eu assumiria que há uma maneira de converterLoginView
paraBaseView<BaseViewPresenter>
.
Estou preso ao uso do .Net 3.5