Можно ли создать связыватель модели для универсального типа? Например, если у меня есть тип
public class MyType<T>
Есть ли способ создать настраиваемый связыватель модели, который будет работать с любым типом MyType?
Спасибо, Натан
Можно ли создать связыватель модели для универсального типа? Например, если у меня есть тип
public class MyType<T>
Есть ли способ создать настраиваемый связыватель модели, который будет работать с любым типом MyType?
Спасибо, Натан
Создайте привязку модели, переопределите BindModel, проверьте тип и сделайте то, что вам нужно сделать
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);
}
}
Установите привязку вашей модели по умолчанию в global.asax
protected void Application_Start() {
// Model Binder for My Type
ModelBinders.Binders.DefaultBinder = new MyModelBinder();
}
проверяет соответствие общей базы
private bool HasGenericTypeBase(Type type, Type genericType)
{
while (type != typeof(object))
{
if (type.IsGenericType && type.GetGenericTypeDefinition() == genericType) return true;
type = type.BaseType;
}
return false;
}