public Metadata(IAspectOrientedMetadata metadata, IEnumerable <object> attributes)
            {
                Type  = default(Type);
                Order = null;
                Tag   = default(object);
                foreach (var attribute in attributes)
                {
                    if (!(attribute is Attribute attributeValue))
                    {
                        continue;
                    }

                    if (Type == default(Type) && metadata.TryGetType(attributeValue, out var curType))
                    {
                        Type = curType;
                    }

                    if (Order == null && metadata.TryGetOrder(attributeValue, out var curOrder))
                    {
                        Order = curOrder;
                    }

                    if (Tag == default(object) && metadata.TryGetTag(attributeValue, out var curTag))
                    {
                        Tag = curTag;
                    }

                    if (Type != default(Type) && Order != null && Tag != default(object))
                    {
                        break;
                    }
                }
            }
 public AspectOrientedAutowiringStrategy([NotNull] IAspectOrientedMetadata metadata)
 {
     _metadata = metadata ?? throw new ArgumentNullException(nameof(metadata));
 }