【发布时间】:2014-06-02 14:09:08
【问题描述】:
我有一个在类级别定义数据注释的类。元数据类具有与之关联的自定义属性,以及通常的 DisplayName、DisplayFormat 等。
public class BaseMetaData
{
[DisplayName("Id")]
public object Id { get; set; }
[DisplayName("Selected")]
[ExportItem(Exclude = true)]
public object Selected { get; set; }
}
[MetadataType(typeof(BaseMetaData))]
public class BaseViewModel
{
public int Id { get; set; }
public bool Selected { get; set; }
给定类型 T,我如何从元数据类中检索自定义属性?下面的尝试不起作用,因为元数据属性来自 BaseViewModel 而不是 BaseMetaData 类。
需要通用工作,即不能执行 typeof(BaseMetaData).GetProperty(e.PropertyName)。想知道是否有一种方法可以从类中获取 MetadataType,那么它将成为可能。
var type = typeof (T);
var metaData = ModelMetadataProviders.Current.GetMetadataForType(null, type);
var propertMetaData = metaData.Properties
.Where(e =>
{
var attribute = type.GetProperty(e.PropertyName)
.GetCustomAttributes(typeof(ExportItemAttribute), false)
.FirstOrDefault() as ExportItemAttribute;
return attribute == null || !attribute.Exclude;
})
.ToList();
【问题讨论】:
-
有什么理由不能只用这些属性注释 BaseViewModel 吗?我从关注点分离的角度理解,但这可能有点矫枉过正。
-
没有理由,如果有可能知道会很有趣!
-
@David 几乎一切皆有可能!!..只是我们需要一些逻辑的味道。
标签: c# reflection data-annotations