Carpeta Modelo ASP.NET MVC de tipo genérico
-
18-09-2019 - |
Pregunta
¿Es posible crear una carpeta de modelo para un tipo genérico? Por ejemplo, si tengo un tipo
public class MyType<T>
¿Hay alguna manera de crear un modelo personalizado de aglutinante que funcionará para cualquier tipo de MyType?
Gracias, Nathan
Solución
Crear un modelbinder, anular bindModel, comprobar el tipo y hacer lo que tiene que hacer
public class MyModelBinder
: DefaultModelBinder {
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) {
if (HasGenericTypeBase(bindingContext.ModelType, typeof(MyType<>)) {
// do your thing
}
return base.BindModel(controllerContext, bindingContext);
}
}
Establecer su carpeta de modelo a los valores predeterminados en el Global.asax
protected void Application_Start() {
// Model Binder for My Type
ModelBinders.Binders.DefaultBinder = new MyModelBinder();
}
cheques para búsqueda de base genérica
private bool HasGenericTypeBase(Type type, Type genericType)
{
while (type != typeof(object))
{
if (type.IsGenericType && type.GetGenericTypeDefinition() == genericType) return true;
type = type.BaseType;
}
return false;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow