我有一个复杂的解决方案,其中部分问题是从 HTML 表单到一系列数据库支持且相对复杂的实体框架 DbSet 的模型绑定。
问题是,我们有一个 EF 定义的域模型,它封装了我们需要了解的关于我们正在捕获的数据的所有信息;但是项目的管理员希望能够制作一个类似问卷的表格,允许他们选择该域的任何成员。
无论如何,这不是问题本身,因为它在很大程度上是有效的,至少它对于简单的成员、字符串、日期、布尔值等非常有效。棘手的部分是管理具有多个字段的成员,例如地址对象。
一个解决方案是使用反射来设置我们从表单发布中收到的域的值,但这当然有它的开销,我被迫找到一种更好的做事方式;在我的研究中,我发现了“即兴界面”项目,它承诺比反射提高很多速度,但我有一个简单的问题。
获取和设置属性都很好:
var val = Impromptu.InvokeGet(domain, "fieldName");
Impromptu.InvokeSet(domain, "fieldName", value);
但我需要做的是找到属性的类型。到目前为止,我仍然只能看到如何使用反射:
PropertyInfo pi = domain.GetType().GetProperty("Name", BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
if (pi.GetValue(domain) is IMyInterface)
{
// ? profit
}
那么:Impromptu 可以做到这一点吗?我需要将该属性转换为我的接口,因为它具有将 html 表单帖子转换为我的 EF 对象的成员。