コード例 #1
0
        /// <summary>
        /// Gets metadata as optional value.
        /// </summary>
        /// <typeparam name="TMetadata">Metadata type.</typeparam>
        /// <param name="metadataProvider">Metadata provider.</param>
        /// <param name="metadataName">Optional metadata name.</param>
        /// <returns>Metadata or default value if not found.</returns>
        public static Option <TMetadata> GetMetadataAsOption <TMetadata>(
            this IMetadataProvider metadataProvider,
            string metadataName = null)
        {
            metadataProvider.AssertArgumentNotNull(nameof(metadataProvider));

            metadataName ??= typeof(TMetadata).FullName;
            var metadata = metadataProvider.Metadata ?? metadataProvider.GetInstanceMetadata();

            var propertyValue = metadata.GetPropertyValue <TMetadata>(Search
                                                                      .ByNameAndComparer <TMetadata>(metadataName, MetadataProvider.DefaulPropertyComparer)
                                                                      .ReturnNull());

            if (propertyValue.HasValue() && !propertyValue.Value.IsNull())
            {
                return(propertyValue.Value);
            }

            return(Option <TMetadata> .None);
        }