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>();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值