ASP.NET MVC Modelo Binder para tipo genérico
-
18-09-2019 - |
Pergunta
É possível criar um fichário de modelo para um tipo genérico? Por exemplo, se eu tenho um tipo
public class MyType<T>
Existe alguma maneira para criar um modelo personalizado aglutinante que irá trabalhar para qualquer tipo de MyType?
Obrigado, Nathan
Solução
Criar um ModelBinder, substituir bindModel, verifique o tipo e fazer o que você precisa fazer
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);
}
}
Defina o seu fichário de modelo para o padrão no global.asax
protected void Application_Start() {
// Model Binder for My Type
ModelBinders.Binders.DefaultBinder = new MyModelBinder();
}
verifica se há correspondência 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow