Пример #1
0
        public IExtensionMetadata GetExtensionMetadata([Required] string id)
        {
            IExtensionMetadata result = null;

            var type   = GetType();
            var fields = type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic)
                         .Where(x => x.GetCustomAttribute(typeof(ImportManyAttribute)) != null).ToArray();

            if (fields.Any())
            {
                foreach (var field in fields)
                {
                    var variable = field.GetValue(this) as IEnumerable <object>;
                    IExtensionMetadata metadata = variable?
                                                  .Select(x => (IExtensionMetadata)x.GetType().GetProperty("Metadata")?.GetValue(x))
                                                  .FirstOrDefault(x => string.CompareOrdinal(x.Id, id) == 0);
                    if (metadata != null)
                    {
                        result = metadata;
                        break;
                    }
                }
            }

            return(result);
        }
Пример #2
0
        /// <summary>
        /// Tests a given extension metadata set against the given object.
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="metadata"></param>
        /// <returns></returns>
        internal static bool Predicate(XObject obj, IExtensionMetadata metadata)
        {
            Contract.Requires <ArgumentNullException>(obj != null);
            Contract.Requires <ArgumentNullException>(metadata != null);

            if (!metadata.ObjectType.HasFlag(GetObjectType(obj)))
            {
                return(false);
            }

            if (obj is XElement)
            {
                if (!IsMatch((XElement)obj, metadata.NamespaceName, metadata.LocalName))
                {
                    return(false);
                }
            }

            if (obj is XAttribute)
            {
                if (!IsMatch((XAttribute)obj, metadata.NamespaceName, metadata.LocalName))
                {
                    return(false);
                }
            }

            // test against specified predicate type
            var predicate = metadata.PredicateType != null?predicates.GetOrAdd(metadata.PredicateType, _ => (IExtensionPredicate)Activator.CreateInstance(_)) : null;

            if (predicate != null)
            {
                if (!predicate.IsMatch(obj))
                {
                    return(false);
                }
            }

            return(true);
        }
Пример #3
0
 /// <summary>
 /// Return the string used for the "scope".
 /// </summary>
 /// <param name="extensionMetadata_"></param>
 /// <returns>The scope, equal to assembly name, given by Assembly.GetName().Name</returns>
 public static string GetScope(this IExtensionMetadata extensionMetadata_)
 {
     return(extensionMetadata_.GetType().Assembly.GetName().Name);
 }
Пример #4
0
 public void Construct(CompositionContainer container, IExtensionMetadata metadata)
 {
     if (Constructed)
         throw new ExtensionAlreadyContructedException(this);
     Metadata = metadata;
     container.SatisfyImportsOnce(this);
     ResolveBaseDependencies();
     Construction();
     Constructed = true;
 }
Пример #5
0
        /// <summary>
        /// Tests a given extension metadata set against the given object.
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="metadata"></param>
        /// <returns></returns>
        internal static bool Predicate(XObject obj, IExtensionMetadata metadata)
        {
            Contract.Requires<ArgumentNullException>(obj != null);
            Contract.Requires<ArgumentNullException>(metadata != null);

            if (!metadata.ObjectType.HasFlag(GetObjectType(obj)))
                return false;

            if (obj is XElement)
                if (!IsMatch((XElement)obj, metadata.NamespaceName, metadata.LocalName))
                    return false;

            if (obj is XAttribute)
                if (!IsMatch((XAttribute)obj, metadata.NamespaceName, metadata.LocalName))
                    return false;

            // test against specified predicate type
            var predicate = metadata.PredicateType != null ? predicates.GetOrAdd(metadata.PredicateType, _ => (IExtensionPredicate)Activator.CreateInstance(_)) : null;
            if (predicate != null)
                if (!predicate.IsMatch(obj))
                    return false;

            return true;
        }