• Caliburn笔记元数据(Metadata)管理(wpf框架)


       在.net中允许我们使用元数据(即Attribute),在使用Action时,结合元数据可以为框架功能提供一些便利.

    caliburn提供了很多的元数据,其皆继承自IMetadata接口,该接口即一个空元数据标记接口而已,继承此接口的元数据则表明为属于caliburn功能范围内的元数据,方便管理.

    image

    IMetadataContainer接口提供了对IMetadata的管理

    image

    MetadataContainer为IMetadataContainer默认实现,继承MetadataContainer的类则均具有管理元数据的功能

    image

    /// <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>();
        }
    }
  • 相关阅读:
    dnn重置Host密码
    fiddle 网址过滤
    生成下面的模块时,启用了优化或没有调试信息
    关闭web.config的继承
    jQuery最佳实践
    坐标高速插入,移动和查询算法
    索引缓存方面的一些测试数据
    转帖微軟将从 .NET 4 以后的版本弃用 System.Data.OracleClient
    算法系列计数排序
    一款免费生成流程图的插件
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1631892.html
Copyright © 2020-2023  润新知