zoukankan      html  css  js  c++  java
  • 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>();
        }
    }
  • 相关阅读:
    day09_request&response学习笔记
    为什么浏览器User-agent(浏览器类型)总是有Mozilla字样?
    无效类字符串:ProgID: Excel.Application
    django2.0升级日记
    Kali Linux信息收集工具
    Kali Linux 工具使用中文说明书
    人手一份核武器
    五大常用算法【转发】
    ACCA AI来袭会议笔记
    2017 Gartner数据科学魔力象限出炉,16位上榜公司花落谁家?
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1631892.html
Copyright © 2011-2022 走看看