【发布时间】:2019-02-03 20:08:28
【问题描述】:
我有一个方法可以根据属性的值确定要为抽象类型实例化的具体类型:
private static Type GetModelType(ControllerContext controllerContext,
ModelBindingContext bindingContext, Type modelType)
{
if (modelType != typeof(MyAbstractClass)) return modelType;
var key = "MyAbstractClass.ConcreteTypeEnum";
if (bindingContext.ValueProvider.ContainsPrefix(key))
{
var concreteTypeName = bindingContext.ValueProvider.GetValue(key).AttemptedValue;
modelType = Type.GetType(
$"{modelType.Namespace}.{concreteTypeName}, {modelType.Assembly}" );
}
}
return modelType;
}
我如何(可能使用反射)确定属性的名称 "MyAbstractClass.ConcreteTypeEnum" 而不使用字符串来查找它?如果有人重命名该属性,我不希望我的模型绑定中断。
我在想一些类似的事情
var key = modelType.GetProperty(t => t.ConcreteTypeEnum).Name
...但不存在这样的小动物。
【问题讨论】:
标签: c# model-view-controller reflection model-binding