public ImportDefinition(Type contractType, ImportCardinality cardinality, Action<Export[], object> action, Func<Export, bool> constraint)
		{
			ContractType = contractType;
			Cardinality = cardinality;
			_action = action;
			_constraint = constraint;
		}
        public ImportDefinition(Expression<Func<ExportDefinition, bool>> constraint, string contractName, ImportCardinality cardinality, bool isRecomposable, bool isPrerequisite)
            : this(contractName, cardinality, isRecomposable, isPrerequisite)
        {
            Requires.NotNull(constraint, "constraint");

            this._constraint = constraint;
        }
        public ImportDefinition AddImport(string contractName, ImportCardinality cardinality, bool isRecomposable, bool isPrerequisite)
        {
            var import = ImportDefinitionFactory.CreateDefault(contractName, cardinality, isRecomposable, isPrerequisite);

            this.AddImport(import);
            return import;
        }
 public DerivedImportDefinition(Expression<Func<ExportDefinition, bool>> constraint, ImportCardinality cardinality, bool isRecomposable, bool isPrerequisite)
 {
     _constraint = constraint ?? (export => false);
     _cardinality = cardinality;
     _isRecomposable = isRecomposable;
     _isPrerequisite = isPrerequisite;
 }
 public DerivedContractBasedImportDefinition(string contractName, IEnumerable<KeyValuePair<string, Type>> requiredMetadata, ImportCardinality cardinality, bool isRecomposable, bool isPrerequisite)
 {
     _contractName = contractName;
     _cardinality = cardinality;
     _isRecomposable = isRecomposable;
     _isPrerequisite = isPrerequisite;
     _requiredMetadata = requiredMetadata;
 }
		public IronPythonImportDefinition(string methodName, Type type, string cardinality, bool isRecomposable, bool isPrerequisite)
		{
			MethodName = methodName;
			Type = type;
			_cardinality = Cardinality;
			if (!Enum.TryParse(cardinality, true, out _cardinality))
				throw new InvalidOperationException("Cardinality not convertable : {0}");
			IsRecomposable = isRecomposable;
			IsPrerequisite = isPrerequisite;
		}
 public IronPythonContractBasedImportDefinition(string methodName, string contractName,
                                                string requiredTypeIdentity,
                                                IEnumerable<KeyValuePair<string, Type>> requiredMetadata,
                                                ImportCardinality cardinality, bool isRecomposable,
                                                bool isPrerequisite, CreationPolicy requiredCreationPolicy)
     : base(contractName, requiredTypeIdentity, requiredMetadata, cardinality, isRecomposable, isPrerequisite,
         requiredCreationPolicy)
 {
     MethodName = methodName;
 }
Esempio n. 8
0
 public static ContractBasedImportDefinition CreateImportDefinition(
     Lazy<ParameterInfo> parameter,
     string contractName,
     string requiredTypeIdentity,
     IEnumerable<KeyValuePair<string, Type>> requiredMetadata,
     ImportCardinality cardinality,
     CreationPolicy requiredCreationPolicy,
     bool isExportFactory,
     ICompositionElement origin)
 {
     return ReflectionModelServices.CreateImportDefinition(parameter, contractName, requiredTypeIdentity, requiredMetadata, cardinality, requiredCreationPolicy, isExportFactory, origin);
 }
 public static ContractBasedImportDefinition CreateImportDefinition(
     LazyMemberInfo importingMember,
     string contractName,
     string requiredTypeIdentity,
     IEnumerable<KeyValuePair<string, Type>> requiredMetadata,
     ImportCardinality cardinality,
     bool isRecomposable,
     CreationPolicy requiredCreationPolicy,
     ICompositionElement origin)
 {
     return CreateImportDefinition(importingMember, contractName, requiredTypeIdentity, requiredMetadata, cardinality, isRecomposable, requiredCreationPolicy, false, origin);
 }
 public ReflectionImportDefinition(
     string contractName, 
     string requiredTypeIdentity,
     IEnumerable<KeyValuePair<string, Type>> requiredMetadata,
     ImportCardinality cardinality, 
     bool isRecomposable, 
     bool isPrerequisite, 
     CreationPolicy requiredCreationPolicy,
     ICompositionElement origin) 
     : base(contractName, requiredTypeIdentity, requiredMetadata, cardinality, isRecomposable, isPrerequisite, requiredCreationPolicy)
 {
     this._origin = origin;
 }
        public ReflectionParameterImportDefinition(
            Lazy<ParameterInfo> importingLazyParameter,
            string contractName, 
            string requiredTypeIdentity,
            IEnumerable<KeyValuePair<string,Type>> requiredMetadata,
            ImportCardinality cardinality, 
            CreationPolicy requiredCreationPolicy,
            ICompositionElement origin) 
            : base(contractName, requiredTypeIdentity, requiredMetadata, cardinality, false, true, requiredCreationPolicy, origin)
        {
            Assumes.NotNull(importingLazyParameter);

            this._importingLazyParameter = importingLazyParameter;
        }
Esempio n. 12
0
        public ImportType(Type type, ImportCardinality cardinality)
        {
            Assumes.NotNull(type);

            this._type = type;
            this._isAssignableCollectionType = IsTypeAssignableCollectionType(type);

            if (cardinality == ImportCardinality.ZeroOrMore)
            {
                this._elementType = CollectionServices.GetEnumerableElementType(type);
            }

            this._lazyType = CreateLazyType(this._elementType ?? this._type);
        }
Esempio n. 13
0
        public ImportType(Type type, ImportCardinality cardinality)
        {
            Assumes.NotNull(type);

            this._type = type;
            this._contractType = type;

            if (cardinality == ImportCardinality.ZeroOrMore)
            {
                this._isAssignableCollectionType = IsTypeAssignableCollectionType(type);
                this._contractType = CheckForCollection(type);
            }

            this._contractType = CheckForLazyAndPartCreator(this._contractType);
        }
        public ReflectionMemberImportDefinition(
            LazyMemberInfo importingLazyMember,
            string contractName,
            string requiredTypeIdentity,
            IEnumerable<string> requiredMetadata,
            ImportCardinality cardinality,
            bool isRecomposable,
            CreationPolicy requiredCreationPolicy,
            ICompositionElement origin)
            : base(contractName, requiredTypeIdentity, requiredMetadata, cardinality, isRecomposable, false, requiredCreationPolicy, origin)
        {
            Assumes.NotNull(contractName);

            this._importingLazyMember = importingLazyMember;
        }
Esempio n. 15
0
        internal ImportDefinition(string contractName, ImportCardinality cardinality, bool isRecomposable, bool isPrerequisite)
        {
            if (
                (cardinality != ImportCardinality.ExactlyOne) &&
                (cardinality != ImportCardinality.ZeroOrMore) &&
                (cardinality != ImportCardinality.ZeroOrOne)
                )
            {
                throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Strings.ArgumentOutOfRange_InvalidEnum, "cardinality", cardinality, typeof(ImportCardinality).Name), "cardinality");
            }

            this._contractName = contractName ?? EmptyContractName;
            this._cardinality = cardinality;
            this._isRecomposable = isRecomposable;
            this._isPrerequisite = isPrerequisite;
        }
        public ReflectionMemberImportDefinition(
            LazyMemberInfo importingLazyMember,
            string contractName, 
            string requiredTypeIdentity,
            IEnumerable<KeyValuePair<string, Type>> requiredMetadata,
            ImportCardinality cardinality, 
            bool isRecomposable, 
            bool isPrerequisite,
            CreationPolicy requiredCreationPolicy,
            IDictionary<string, object> metadata,
            ICompositionElement origin) 
            : base(contractName, requiredTypeIdentity, requiredMetadata, cardinality, isRecomposable, isPrerequisite, requiredCreationPolicy, metadata, origin)
        {
            Assumes.NotNull(contractName);

            this._importingLazyMember = importingLazyMember;
        }
 public MetadataContractBasedImportDefinition(Type contractType,
                                              string requiredTypeIdentity,
                                              IEnumerable<Tuple<string, object, IEqualityComparer>> requiredMetadata,
                                              ImportCardinality cardinality,
                                              bool isRecomposable,
                                              bool isPrerequisite,
                                              CreationPolicy requiredCreationPolicy)
     : base(AttributedModelServices.GetContractName(contractType),
            requiredTypeIdentity,
            requiredMetadata.Select(t => new KeyValuePair<string, Type>(t.Item1, t.Item2.GetType())),
            cardinality,
            isRecomposable,
            isPrerequisite,
            requiredCreationPolicy)
 {
     this.RequiredMetadataValues = requiredMetadata.ToArray();
 }
Esempio n. 18
0
        public static ContractBasedImportDefinition CreateImportDefinition(
            LazyMemberInfo importingMember,
            string contractName,
            string requiredTypeIdentity,
            IEnumerable<KeyValuePair<string, Type>> requiredMetadata,
            ImportCardinality cardinality,
            bool isRecomposable,
            CreationPolicy requiredCreationPolicy,
            bool isPartCreator,
            ICompositionElement origin)
        {
            Requires.NotNullOrEmpty(contractName, "contractName");
            Requires.NullOrNotNullElements(requiredMetadata, "requiredMetadata");
            Requires.IsInMembertypeSet(importingMember.MemberType, "importingMember", MemberTypes.Property | MemberTypes.Field);

            if (isPartCreator)
            {
            #if SILVERLIGHT
                return new PartCreatorMemberImportDefinition(
                    importingMember,
                    origin,
                    new ContractBasedImportDefinition(
                        contractName,
                        requiredTypeIdentity,
                        requiredMetadata,
                        cardinality,
                        isRecomposable,
                        false,
                        CreationPolicy.NonShared));
            #else
                throw new ArgumentException("PartCreator is only support in Silverlight version of MEF", "isPartCreator");
            #endif
            }
            else
            {
                return new ReflectionMemberImportDefinition(
                    importingMember,
                    contractName,
                    requiredTypeIdentity,
                    requiredMetadata,
                    cardinality,
                    isRecomposable,
                    requiredCreationPolicy,
                    origin);
            }
        }
Esempio n. 19
0
        public ImportingComposablePart(string exportContractName, ImportCardinality cardinality, bool isRecomposable, params string[] contractNames)
        {
            if (exportContractName != null)
            {
                var definition = ExportDefinitionFactory.Create(exportContractName);

                _exportDefinitions.Add(definition);
            }

            foreach (string contractName in contractNames)
            {
                var definition = ImportDefinitionFactory.Create(contractName, 
                                                                cardinality,
                                                                isRecomposable,
                                                                false);

                _importDefinitions.Add(definition);
            }
        }
Esempio n. 20
0
        public static ContractBasedImportDefinition CreateImportDefinition(
            Lazy<ParameterInfo> parameter,
            string contractName,
            string requiredTypeIdentity,
            IEnumerable<string> requiredMetadata,
            ImportCardinality cardinality,
            CreationPolicy requiredCreationPolicy,
            ICompositionElement origin)
        {
            Requires.NotNull(parameter, "parameter");
            Requires.NotNullOrEmpty(contractName, "contractName");
            Requires.NotNullOrNullElements(requiredMetadata, "requiredMetadata");

            return new ReflectionParameterImportDefinition(
                parameter,
                contractName,
                requiredTypeIdentity,
                requiredMetadata,
                cardinality,
                requiredCreationPolicy,
                origin);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="PropertyBasedImportDefinition"/> class.
        /// </summary>
        /// <param name="contractName">The contract name that is used to identify the current import.</param>
        /// <param name="requiredTypeIdentity">The type identity of the export type expected.</param>
        /// <param name="cardinality">
        ///     One of the enumeration values that indicates the cardinality of the export object required by the import definition.
        /// </param>
        /// <param name="isRecomposable">
        ///     <see langword="true" /> to specify that the import definition can be satisfied multiple times throughout the lifetime of a parts; 
        ///     otherwise, <see langword="false" />.
        /// </param>
        /// <param name="creationPolicy">
        ///     A value that indicates that the importer requires a specific creation policy for the exports used to satisfy this import.
        /// </param>
        /// <param name="declaringType">The type that defines the property.</param>
        /// <param name="property">The property for which the current object stores the serialized data.</param>
        private PropertyBasedImportDefinition(
            string contractName,
            TypeIdentity requiredTypeIdentity,
            ImportCardinality cardinality,
            bool isRecomposable,
            CreationPolicy creationPolicy,
            TypeIdentity declaringType,
            PropertyDefinition property)
            : base(contractName, 
                requiredTypeIdentity, 
                cardinality,
                isRecomposable,
                false,
                creationPolicy,
                declaringType)
        {
            {
                Lokad.Enforce.Argument(() => property);
            }

            m_Property = property;
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="ConstructorBasedImportDefinition"/> class.
        /// </summary>
        /// <param name="contractName">The contract name that is used to identify the current import.</param>
        /// <param name="requiredTypeIdentity">The type identity of the export type expected.</param>
        /// <param name="cardinality">
        ///     One of the enumeration values that indicates the cardinality of the export object required by the import definition.
        /// </param>
        /// <param name="creationPolicy">
        ///     A value that indicates that the importer requires a specific creation policy for the exports used to satisfy this import.
        /// </param>
        /// <param name="declaringType">The type that declares the constructor on which the import is placed.</param>
        /// <param name="constructor">The constructor that declares the import.</param>
        /// <param name="parameter">The parameter on which the import is defined.</param>
        private ConstructorBasedImportDefinition(
            string contractName,
            TypeIdentity requiredTypeIdentity,
            ImportCardinality cardinality,
            CreationPolicy creationPolicy,
            TypeIdentity declaringType,
            ConstructorDefinition constructor,
            ParameterDefinition parameter)
            : base(contractName, 
                requiredTypeIdentity, 
                cardinality,
                false,
                true,
                creationPolicy,
                declaringType)
        {
            {
                Lokad.Enforce.Argument(() => parameter);
            }

            m_Constructor = constructor;
            m_Parameter = parameter;
        }
Esempio n. 23
0
        public static ContractBasedImportDefinition CreateImportDefinition(
            LazyMemberInfo importingMember,
            string contractName,
            string requiredTypeIdentity,
            IEnumerable<string> requiredMetadata,
            ImportCardinality cardinality,
            bool isRecomposable,
            CreationPolicy requiredCreationPolicy,
            ICompositionElement origin)
        {
            Requires.NotNullOrEmpty(contractName, "contractName");
            Requires.NotNullOrNullElements(requiredMetadata, "requiredMetadata");
            Requires.IsInMembertypeSet(importingMember.MemberType, "importingMember", MemberTypes.Property | MemberTypes.Field);

            return new ReflectionMemberImportDefinition(
                importingMember,
                contractName,
                requiredTypeIdentity,
                requiredMetadata,
                cardinality,
                isRecomposable,
                requiredCreationPolicy,
                origin);
        }
Esempio n. 24
0
        /// <summary>
        /// Determines whether the specified part imports the specified contract with the given cardinality.
        /// </summary>
        /// <param name="part">The part.</param>
        /// <typeparam name="T">Type of the contract.</typeparam>
        /// <param name="importCardinality">The import cardinality.</param>
        /// <returns>
        ///     <c>true</c> if the specified part imports the specified contract with the given cardinality; otherwise, <c>false</c>.
        /// </returns>
        public static bool Imports <T>(this ComposablePartDefinition part, ImportCardinality importCardinality)
        {
            Requires.NotNull(part, nameof(part));

            return(part.Imports(typeof(T), importCardinality));
        }
        private static void AddContractMetadata(Dictionary <string, ContractMetadata> contracts, string name, ProjectSystemContractScope scope, ProjectSystemContractProvider provider, ImportCardinality cardinality)
        {
            Requires.NotNull(contracts, nameof(contracts));
            Requires.NotNullOrEmpty(name, nameof(name));

            if (!contracts.TryGetValue(name, out ContractMetadata metadata))
            {
                metadata = new ContractMetadata
                {
                    Provider    = provider,
                    Scope       = scope,
                    Cardinality = cardinality
                };

                contracts.Add(name, metadata);
            }
            else
            {
                // We don't support using the contract name with different interfaces, so we don't verify those contracts.
                if (metadata.Scope != scope)
                {
                    metadata.Scope = null;
                }

                if (metadata.Provider != provider)
                {
                    metadata.Provider = null;
                }

                if (metadata.Cardinality != cardinality)
                {
                    metadata.Cardinality = null;
                }
            }
        }
 private static Action <Export[], object> EagerSetterFor(Type elementType, Action <object, object> setter, ImportCardinality cardinality)
 {
     if (cardinality == ImportCardinality.Many)
     {
         return((exports, part) => setter(part, ArrayOf(elementType, exports.Select(e => e.Value))));
     }
     return((exports, part) => setter(part, exports.Single().Value));
 }
Esempio n. 27
0
 public static ImportDefinition Create(string contractName, ImportCardinality cardinality, bool isRecomposable, bool isPrerequisite)
 {
     return(Create(contractName, (IEnumerable <KeyValuePair <string, Type> >)null, cardinality, isRecomposable, isPrerequisite));
 }
Esempio n. 28
0
 public static ImportDefinition Create(string contractName, IEnumerable <KeyValuePair <string, Type> > requiredMetadata, ImportCardinality cardinality, bool isRecomposable, bool isPrerequisite)
 {
     return(new DerivedContractBasedImportDefinition(contractName, requiredMetadata, cardinality, isRecomposable, isPrerequisite));
 }
Esempio n. 29
0
        public ImportDefinition(Expression <Func <ExportDefinition, bool> > constraint, string?contractName, ImportCardinality cardinality, bool isRecomposable, bool isPrerequisite, IDictionary <string, object?>?metadata)
            : this(contractName, cardinality, isRecomposable, isPrerequisite, metadata)
        {
            Requires.NotNull(constraint, nameof(constraint));

            _constraint = constraint;
        }
 public static ImportDefinition Create(string contractName, IEnumerable<KeyValuePair<string, Type>> requiredMetadata, ImportCardinality cardinality, bool isRecomposable, bool isPrerequisite)
 {
     return new DerivedContractBasedImportDefinition(contractName, requiredMetadata, cardinality, isRecomposable, isPrerequisite);
 }
Esempio n. 31
0
        private static ExportCardinalityCheckResult MatchCardinality(EnumerableCardinality actualCardinality, ImportCardinality importCardinality)
        {
            switch (actualCardinality)
            {
            case EnumerableCardinality.Zero:
                if (importCardinality == ImportCardinality.ExactlyOne)
                {
                    return(ExportCardinalityCheckResult.NoExports);
                }
                break;

            case EnumerableCardinality.TwoOrMore:
                if (importCardinality.IsAtMostOne())
                {
                    return(ExportCardinalityCheckResult.TooManyExports);
                }
                break;

            default:
                if (actualCardinality != EnumerableCardinality.One)
                {
                    throw new Exception(SR.Diagnostic_InternalExceptionMessage);
                }
                break;
            }

            return(ExportCardinalityCheckResult.Match);
        }
Esempio n. 32
0
 public RuntimeImport(ParameterRef importingParameterRef, TypeRef importingSiteTypeRef, TypeRef importingSiteTypeWithoutCollectionRef, ImportCardinality cardinality, IReadOnlyList <RuntimeExport> satisfyingExports, bool isNonSharedInstanceRequired, bool isExportFactory, IReadOnlyDictionary <string, object> metadata, IReadOnlyCollection <string> exportFactorySharingBoundaries)
     : this(importingSiteTypeRef, importingSiteTypeWithoutCollectionRef, cardinality, satisfyingExports, isNonSharedInstanceRequired, isExportFactory, metadata, exportFactorySharingBoundaries)
 {
     this.ImportingParameterRef = importingParameterRef;
 }
Esempio n. 33
0
            private RuntimeImport(TypeRef importingSiteTypeRef, TypeRef importingSiteTypeWithoutCollectionRef, ImportCardinality cardinality, IReadOnlyList <RuntimeExport> satisfyingExports, bool isNonSharedInstanceRequired, bool isExportFactory, IReadOnlyDictionary <string, object> metadata, IReadOnlyCollection <string> exportFactorySharingBoundaries)
            {
                Requires.NotNull(importingSiteTypeRef, nameof(importingSiteTypeRef));
                Requires.NotNull(importingSiteTypeWithoutCollectionRef, nameof(importingSiteTypeWithoutCollectionRef));
                Requires.NotNull(satisfyingExports, nameof(satisfyingExports));

                this.Cardinality                 = cardinality;
                this.SatisfyingExports           = satisfyingExports;
                this.IsNonSharedInstanceRequired = isNonSharedInstanceRequired;
                this.IsExportFactory             = isExportFactory;
                this.Metadata             = metadata;
                this.ImportingSiteTypeRef = importingSiteTypeRef;
                this.ImportingSiteTypeWithoutCollectionRef = importingSiteTypeWithoutCollectionRef;
                this.ExportFactorySharingBoundaries        = exportFactorySharingBoundaries;
            }
Esempio n. 34
0
        private static ImportDefinition BuildImportDefinition(Type type, Type metadataViewType, string contractName, ImportCardinality cardinality)
        {
            Assumes.NotNull(type, metadataViewType, contractName);

            IEnumerable <KeyValuePair <string, Type> > requiredMetadata = CompositionServices.GetRequiredMetadata(metadataViewType);

            string requiredTypeIdentity = null;

            if (type != typeof(object))
            {
                requiredTypeIdentity = AttributedModelServices.GetTypeIdentity(type);
            }

            return(new ContractBasedImportDefinition(contractName, requiredTypeIdentity, requiredMetadata, cardinality, false, true, CreationPolicy.Any));
        }
Esempio n. 35
0
 public ImportingComposablePart(ImportCardinality cardinality, bool isRecomposable, params string[] contractNames)
     : this((string)null, cardinality, isRecomposable, contractNames)
 {
 }
Esempio n. 36
0
 public static ImportingComposablePart CreateImporter(string contractName, ImportCardinality cardinality, bool isRecomposable)
 {
     return(new ImportingComposablePart(cardinality, isRecomposable, contractName));
 }
 public static ImportDefinition Create(string contractName, ImportCardinality cardinality, bool isRecomposable, bool isPrerequisite)
 {
     return Create(contractName, (IEnumerable<KeyValuePair<string, Type>>)null, cardinality, isRecomposable, isPrerequisite);
 }
 public static ImportDefinition Create(Expression<Func<ExportDefinition, bool>> constraint, ImportCardinality cardinality, bool isRecomposable, bool isPrerequisite)
 {
     return new DerivedImportDefinition(constraint, cardinality, isRecomposable, isPrerequisite);
 }
Esempio n. 39
0
 public static ImportDefinition Create(Expression <Func <ExportDefinition, bool> > constraint, ImportCardinality cardinality)
 {
     return(Create(constraint, cardinality, true, false));
 }
Esempio n. 40
0
 public static ImportDefinition CreateDefault(string contractName, ImportCardinality cardinality, bool isRecomposable, bool isPrerequisite)
 {
     return(new ContractBasedImportDefinition(contractName, (string)null, (IEnumerable <KeyValuePair <string, Type> >)null, cardinality, isRecomposable, isPrerequisite, CreationPolicy.Any));
 }
Esempio n. 41
0
 public static ImportDefinition Create(string contractName, ImportCardinality cardinality)
 {
     return(Create(contractName, (IEnumerable <KeyValuePair <string, Type> >)null, cardinality, false, false));
 }
Esempio n. 42
0
        /// <summary>
        /// Determines whether the specified part imports the specified contract with the given cardinality.
        /// </summary>
        /// <param name="part">The part.</param>
        /// <param name="contractName">Name of the contract.</param>
        /// <param name="importCardinality">The import cardinality.</param>
        /// <returns>
        ///     <c>true</c> if the specified part imports the specified contract with the given cardinality; otherwise, <c>false</c>.
        /// </returns>
        public static bool Imports(this ComposablePartDefinition part, string contractName, ImportCardinality importCardinality)
        {
            Requires.NotNull(part, nameof(part));
            Requires.NotNull(contractName, nameof(contractName));

            foreach (ImportDefinition import in part.ImportDefinitions)
            {
                if (StringComparers.ContractName.Equals(contractName, import.ContractName) && (import.Cardinality == importCardinality))
                {
                    return(true);
                }
            }

            return(false);
        }
Esempio n. 43
0
 public static ImportDefinition Create(Type contractType, ImportCardinality cardinality)
 {
     return(Create(AttributedModelServices.GetContractName(contractType), cardinality));
 }
Esempio n. 44
0
 public DerivedImportDefinition(Expression <Func <ExportDefinition, bool> > constraint, ImportCardinality cardinality, bool isRecomposable, bool isPrerequisite)
 {
     _constraint     = constraint ?? (export => false);
     _cardinality    = cardinality;
     _isRecomposable = isRecomposable;
     _isPrerequisite = isPrerequisite;
 }
 private static Action <Export[], object> LazySetterFor(Type elementType, Action <object, object> setter, ImportCardinality cardinality, Type metadataType)
 {
     if (cardinality == ImportCardinality.Many)
     {
         return((exports, part) => setter(part, ArrayOf(elementType, exports.Select(e => LazyInstanceFor(elementType, metadataType, e)))));
     }
     return((exports, part) => setter(part, LazyInstanceFor(elementType, metadataType, exports.Single())));
 }
Esempio n. 46
0
 public ImportDefinitionImpl(Expression <Func <ExportDefinition, bool> > constraint, string contractName, ImportCardinality cardinality, bool isRecomposable, bool isPrerequisite, IDictionary <string, object> metadata)
     : base(constraint, contractName, cardinality, isRecomposable, isPrerequisite, metadata)
 {
 }
        public ImportDefinition(Expression <Func <ExportDefinition, bool> > constraint, string contractName, ImportCardinality cardinality, bool isRecomposable, bool isPrerequisite)
            : this(contractName, cardinality, isRecomposable, isPrerequisite)
        {
            Requires.NotNull(constraint, "constraint");

            this._constraint = constraint;
        }
Esempio n. 48
0
 public ContractBasedImportDefinition(string contractName, string requiredTypeIdentity, IEnumerable <KeyValuePair <string, Type> > requiredMetadata,
                                      ImportCardinality cardinality, bool isRecomposable, bool isPrerequisite, CreationPolicy requiredCreationPolicy)
     : this(contractName, requiredTypeIdentity, requiredMetadata, cardinality, isRecomposable, isPrerequisite, requiredCreationPolicy, MetadataServices.EmptyMetadata)
 {
 }
Esempio n. 49
0
        /// <summary>
        /// Determines whether the specified part imports the specified contract with the given cardinality.
        /// </summary>
        /// <param name="part">The part.</param>
        /// <param name="contractType">Type of the contract.</param>
        /// <param name="importCardinality">The import cardinality.</param>
        /// <returns>
        ///     <c>true</c> if the specified part imports the specified contract with the given cardinality; otherwise, <c>false</c>.
        /// </returns>
        public static bool Imports(this ComposablePartDefinition part, Type contractType, ImportCardinality importCardinality)
        {
            Requires.NotNull(part, nameof(part));
            Requires.NotNull(contractType, nameof(contractType));

            return(part.Imports(AttributedModelServices.GetContractName(contractType), importCardinality));
        }
Esempio n. 50
0
 /// <summary>
 ///     Returns a value indicating whether cardinality is
 ///     <see cref="ImportCardinality.ZeroOrOne"/> or
 ///     <see cref="ImportCardinality.ExactlyOne"/>.
 /// </summary>
 internal static bool IsAtMostOne(this ImportCardinality cardinality)
 {
     return(cardinality == ImportCardinality.ZeroOrOne || cardinality == ImportCardinality.ExactlyOne);
 }
Esempio n. 51
0
 private HTMLImportDefinition(string toString, Expression <Func <ExportDefinition, bool> > constraint, string contractName, ImportCardinality cardinality, bool isRecomposable, bool isPrerequisite) : base(constraint, contractName, cardinality, isRecomposable, isPrerequisite)
 {
     this.toString = toString;
 }
Esempio n. 52
0
 public static ImportingComposablePart CreateImporter(string contractName, ImportCardinality cardinality)
 {
     return(CreateImporter(contractName, cardinality, false));
 }
        /// <summary>
        ///     Initializes a new instance of the <see cref="ContractBasedImportDefinition"/> class 
        ///     with the specified contract name, required metadataq, cardinality, value indicating 
        ///     if the import definition is recomposable and a value indicating if the import definition 
        ///     is a prerequisite.
        /// </summary>
        /// <param name="contractName">
        ///     A <see cref="String"/> containing the contract name of the 
        ///     <see cref="Export"/> required by the <see cref="ContractBasedImportDefinition"/>.
        /// </param>
        /// <param name="requiredTypeIdentity">
        ///     The type identity of the export type expected. Use <see cref="AttributedModelServices.GetTypeIdentity(Type)"/>
        ///     to generate a type identity for a given type. If no specific type is required pass <see langword="null"/>.
        /// </param>
        /// <param name="requiredMetadata">
        ///     An <see cref="IEnumerable{T}"/> of <see cref="String"/> objects containing
        ///     the metadata names of the <see cref="Export"/> required by the 
        ///     <see cref="ContractBasedImportDefinition"/>; or <see langword="null"/> to
        ///     set the <see cref="RequiredMetadata"/> property to an empty <see cref="IEnumerable{T}"/>.
        /// </param>
        /// <param name="cardinality">
        ///     One of the <see cref="ImportCardinality"/> values indicating the 
        ///     cardinality of the <see cref="Export"/> objects required by the
        ///     <see cref="ContractBasedImportDefinition"/>.
        /// </param>
        /// <param name="isRecomposable">
        ///     <see langword="true"/> if the <see cref="ContractBasedImportDefinition"/> can be satisfied 
        ///     multiple times throughout the lifetime of a <see cref="ComposablePart"/>, otherwise, 
        ///     <see langword="false"/>.
        /// </param>
        /// <param name="isPrerequisite">
        ///     <see langword="true"/> if the <see cref="ContractBasedImportDefinition"/> is required to be 
        ///     satisfied before a <see cref="ComposablePart"/> can start producing exported 
        ///     objects; otherwise, <see langword="false"/>.
        /// </param>
        /// <param name="requiredCreationPolicy">
        ///     A value indicating that the importer requires a specific <see cref="CreationPolicy"/> for 
        ///     the exports used to satisfy this import. If no specific <see cref="CreationPolicy"/> is needed
        ///     pass the default <see cref="CreationPolicy.Any"/>.
        /// </param>
        /// <exception cref="ArgumentNullException">
        ///     <paramref name="contractName"/> is <see langword="null"/>.
        /// </exception>
        /// <exception cref="ArgumentException">
        ///     <paramref name="contractName"/> is an empty string ("").
        ///     <para>
        ///         -or-
        ///     </para>
        ///     <paramref name="requiredMetadata"/> contains an element that is <see langword="null"/>.
        ///     <para>
        ///         -or-
        ///     </para>
        ///     <paramref name="cardinality"/> is not one of the <see cref="ImportCardinality"/> 
        ///     values.
        /// </exception>
        public ContractBasedImportDefinition(string contractName, string requiredTypeIdentity, IEnumerable<string> requiredMetadata, 
            ImportCardinality cardinality, bool isRecomposable, bool isPrerequisite, CreationPolicy requiredCreationPolicy)
            : base(contractName, cardinality, isRecomposable, isPrerequisite)
        {
            Requires.NotNullOrEmpty(contractName, "contractName");
            Requires.NullOrNotNullElements(requiredMetadata, "requiredMetadata");

            this._requiredTypeIdentity = requiredTypeIdentity;

            if (requiredMetadata != null)
            {
                this._requiredMetadata = requiredMetadata;
            }

            this._requiredCreationPolicy = requiredCreationPolicy;
        }
Esempio n. 54
0
 public static ImportDefinition Create(Expression <Func <ExportDefinition, bool> > constraint, ImportCardinality cardinality, bool isRecomposable, bool isPrerequisite)
 {
     return(new DerivedImportDefinition(constraint, cardinality, isRecomposable, isPrerequisite));
 }
 public static ImportDefinition Create(string contractName, ImportCardinality cardinality)
 {
     return Create(contractName, (IEnumerable<KeyValuePair<string, Type>>)null, cardinality, false, false);
 }
Esempio n. 56
0
        /// <summary>
        ///     Initializes a new instance of the <see cref="ImportDefinition"/> class
        ///     with the specified constraint, cardinality, value indicating if the import
        ///     definition is recomposable and a value indicating if the import definition
        ///     is a prerequisite.
        /// </summary>
        /// <param name="constraint">
        ///     A <see cref="Expression{TDelegate}"/> containing a <see cref="Func{T, TResult}"/>
        ///     that defines the conditions that must be matched for the <see cref="ImportDefinition"/>
        ///     to be satisfied by an <see cref="Export"/>.
        /// </param>
        /// <param name="contractName">
        ///     The contract name of the export that this import is interested in. The contract name
        ///     property is used as guidance and not automatically enforced in the constraint. If
        ///     the contract name is a required in the constraint then it should be added to the constraint
        ///     by the caller of this constructor.
        /// </param>
        /// <param name="cardinality">
        ///     One of the <see cref="ImportCardinality"/> values indicating the
        ///     cardinality of the <see cref="Export"/> objects required by the
        ///     <see cref="ImportDefinition"/>.
        /// </param>
        /// <param name="isRecomposable">
        ///     <see langword="true"/> if the <see cref="ImportDefinition"/> can be satisfied
        ///     multiple times throughout the lifetime of a <see cref="ComposablePart"/>, otherwise,
        ///     <see langword="false"/>.
        /// </param>
        /// <param name="isPrerequisite">
        ///     <see langword="true"/> if the <see cref="ImportDefinition"/> is required to be
        ///     satisfied before a <see cref="ComposablePart"/> can start producing exported
        ///     objects; otherwise, <see langword="false"/>.
        /// </param>
        /// <exception cref="ArgumentNullException">
        ///     <paramref name="constraint"/> is <see langword="null"/>.
        /// </exception>
        /// <exception cref="ArgumentException">
        ///     <paramref name="cardinality"/> is not one of the <see cref="ImportCardinality"/>
        ///     values.
        /// </exception>
        public ImportDefinition(Expression <Func <ExportDefinition, bool> > constraint, string?contractName, ImportCardinality cardinality, bool isRecomposable, bool isPrerequisite)
            : this(contractName, cardinality, isRecomposable, isPrerequisite, MetadataServices.EmptyMetadata)
        {
            Requires.NotNull(constraint, nameof(constraint));

            _constraint = constraint;
        }
 public static ImportDefinition Create(Expression<Func<ExportDefinition, bool>> constraint, ImportCardinality cardinality)
 {
     return Create(constraint, cardinality, true, false);
 }
Esempio n. 58
0
        private IEnumerable <Export> GetExportsCore(Type type, Type metadataViewType, string contractName, ImportCardinality cardinality)
        {
            // Only 'type' cannot be null - the other parameters have sensible defaults.
            Requires.NotNull(type, nameof(type));

            if (string.IsNullOrEmpty(contractName))
            {
                contractName = AttributedModelServices.GetContractName(type);
            }

            if (metadataViewType == null)
            {
                metadataViewType = ExportServices.DefaultMetadataViewType;
            }

            if (!MetadataViewProvider.IsViewTypeValid(metadataViewType))
            {
                throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, SR.InvalidMetadataView, metadataViewType.Name));
            }

            ImportDefinition importDefinition = BuildImportDefinition(type, metadataViewType, contractName, cardinality);

            return(GetExports(importDefinition, null));
        }
 public static ImportDefinition CreateDefault(string contractName, ImportCardinality cardinality, bool isRecomposable, bool isPrerequisite)
 {
     return new ContractBasedImportDefinition(contractName, (string)null, (IEnumerable<KeyValuePair<string, Type>>)null, cardinality, isRecomposable, isPrerequisite, CreationPolicy.Any);
 }
Esempio n. 60
0
        private static ImportDefinition BuildImportDefinition(Type type, Type metadataViewType, string contractName, ImportCardinality cardinality)
        {
            if (type == null)
            {
                throw new ArgumentNullException(nameof(type));
            }

            if (metadataViewType == null)
            {
                throw new ArgumentNullException(nameof(metadataViewType));
            }

            if (contractName == null)
            {
                throw new ArgumentNullException(nameof(contractName));
            }

            IEnumerable <KeyValuePair <string, Type> > requiredMetadata = CompositionServices.GetRequiredMetadata(metadataViewType);
            IDictionary <string, object> metadata = CompositionServices.GetImportMetadata(type, null);

            string requiredTypeIdentity = null;

            if (type != typeof(object))
            {
                requiredTypeIdentity = AttributedModelServices.GetTypeIdentity(type);
            }

            return(new ContractBasedImportDefinition(contractName, requiredTypeIdentity, requiredMetadata, cardinality, false, true, CreationPolicy.Any, metadata));
        }