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>();
        }
    }
  • 相关阅读:
    FlashDevelop视频教程三:多工程的使用及编译SWC
    FlashDevelop插件ASCompletion
    c#实现MD5加密
    FlashDevelop视频教程一:简介及安装
    FlashDevelop4 快捷键
    FlashDevelop视频教程四:FLA工程调试和一些技巧
    一个简单的c#操作XML文件的类,只能操作一层的节点
    验证用户的存储过程
    MOSS模态窗口应用
    二进制图片格式转换
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1631892.html
Copyright © 2011-2022 走看看