我目前正在构建一个以下列方式工作的流畅API:
this.Property(x => x.Address).Display("Postal Address");
由于我需要在以后引用这些数据,我想将它添加到字典中,其中键的格式为ClassName.PropertyName
(这似乎是以后检索数据的最可靠方法约会 - 虽然如果有更好的方法,我肯定会接受建议。)
例如,如果我有一个类如下:
namespace ExampleProject.Demo.ViewModels
{
public class ExampleViewModel
{
public string Address { get; set; }
}
}
Address属性的键是名称空间,后跟属性名称,如下所示:ExampleProject.Demo.ViewModels.Address.ExampleViewModel
。
但是,我很难通过上面传递给Property(x => x)
方法的表达式的反射来获取这些完整信息。有人能指出我如何从Property方法的参数中检索这些数据吗?
Property
方法的签名如下:
public PropertyInstance<TProp> Property<TProp>(Expression<Func<TModel, TProp>> expression) where TProp : class
{
...
}
非常感谢
答案 0 :(得分:4)
以下内容将检索该属性:
var property = (PropertyInfo)(((MemberExpression)expression.Body).Member);
由此,您可以检索以下内容:
property.Name
property.DeclaringType.FullName or AssemblyQualifiedName
我宁愿在你的密钥中使用Type.AssemblyQualifiedName
而不是命名空间名称,以防你有不同的程序集包含相同的类型。