Caliburn笔记-元数据(Metadata)管理(wpf框架)
2009-12-25 10:45 Clingingboy 阅读(1216) 评论(0) 编辑 收藏 举报在.net中允许我们使用元数据(即Attribute),在使用Action时,结合元数据可以为框架功能提供一些便利.
caliburn提供了很多的元数据,其皆继承自IMetadata接口,该接口即一个空元数据标记接口而已,继承此接口的元数据则表明为属于caliburn功能范围内的元数据,方便管理.
IMetadataContainer接口提供了对IMetadata的管理
MetadataContainer为IMetadataContainer默认实现,继承MetadataContainer的类则均具有管理元数据的功能
/// <summary> /// An implementation of <see cref="IMetadataContainer"/>. /// </summary> public class MetadataContainer : PropertyChangedBase, IMetadataContainer { private List<IMetadata> _metadata; /// <summary> /// Adds the metadata from the provided member to the collection. /// </summary> /// <param name="member">The member.</param> protected virtual void AddMetadataFrom(MemberInfo member) { member.GetCustomAttributes(true) .OfType<IMetadata>() .Apply(AddMetadata); } /// <summary> /// Adds metadata to the store. /// </summary> /// <param name="metadata">The metadata.</param> public virtual void AddMetadata(IMetadata metadata) { if(_metadata == null) _metadata = new List<IMetadata>(); _metadata.Add(metadata); } /// <summary> /// Retrieves metadata from the store. /// </summary> /// <typeparam name="T"></typeparam> /// <returns></returns> public virtual T GetMetadata<T>() where T : IMetadata { return _metadata == null ? default(T) : _metadata.OfType<T>().FirstOrDefault(); } /// <summary> /// Gets the matching metadata. /// </summary> /// <typeparam name="T">The type to match.</typeparam> /// <returns>The matches</returns> public virtual IEnumerable<T> GetMatchingMetadata<T>() where T : IMetadata { return _metadata == null ? new List<T>() : _metadata.OfType<T>(); } }