¿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