/// <summary> /// Returns all exports that match the conditions of the specified import. /// </summary> /// <param name="definition"> /// The <see cref="ImportDefinition"/> that defines the conditions of the /// <see cref="Export"/> objects to get. /// </param> /// <result> /// An <see cref="IEnumerable{T}"/> of <see cref="Export"/> objects that match /// the conditions defined by <see cref="ImportDefinition"/>, if found; otherwise, an /// empty <see cref="IEnumerable{T}"/>. /// </result> /// <exception cref="ArgumentNullException"> /// <paramref name="definition"/> is <see langword="null"/>. /// </exception> /// <exception cref="ImportCardinalityMismatchException"> /// <para> /// <see cref="ImportDefinition.Cardinality"/> is <see cref="ImportCardinality.ExactlyOne"/> and /// there are zero <see cref="Export"/> objects that match the conditions of the specified /// <see cref="ImportDefinition"/>. /// </para> /// -or- /// <para> /// <see cref="ImportDefinition.Cardinality"/> is <see cref="ImportCardinality.ZeroOrOne"/> or /// <see cref="ImportCardinality.ExactlyOne"/> and there are more than one <see cref="Export"/> /// objects that match the conditions of the specified <see cref="ImportDefinition"/>. /// </para> /// </exception> public IEnumerable<Export> GetExports(ImportDefinition definition, AtomicComposition atomicComposition) { Requires.NotNull(definition, "definition"); Contract.Ensures(Contract.Result<IEnumerable<Export>>() != null); IEnumerable<Export> exports; ExportCardinalityCheckResult result = this.TryGetExportsCore(definition, atomicComposition, out exports); switch(result) { case ExportCardinalityCheckResult.Match: return exports; case ExportCardinalityCheckResult.NoExports: throw new ImportCardinalityMismatchException(string.Format(CultureInfo.CurrentCulture, Strings.CardinalityMismatch_NoExports, definition.ToString())); default: Assumes.IsTrue(result == ExportCardinalityCheckResult.TooManyExports); throw new ImportCardinalityMismatchException(string.Format(CultureInfo.CurrentCulture, Strings.CardinalityMismatch_TooManyExports, definition.ToString())); } }
private void DumpImport(ComposablePartDefinition part, ImportDefinition i) { Dump(" Import: " + i.ToString()); }
public void ToString_ValueAsConstraintArgument_ShouldReturnConstraintProperty() { var expectations = new ExpectationCollection<Expression<Func<ExportDefinition, bool>>, string>(); expectations.Add(d => d.ContractName == "ContractName", @"d.ContractName ==? ""ContractName"""); expectations.Add(d => d.ContractName.Equals("ContractName"), @"d.ContractName.Equals\(""ContractName""\)"); expectations.Add(d => (string)d.Metadata["Name"] == "Value", @"Convert\(d.Metadata.get_Item\(""Name""\)\) ==? ""Value"""); expectations.Add(d => true, "True"); foreach (var e in expectations) { var item = new ImportDefinition(e.Input, "", ImportCardinality.ExactlyOne, false, false); Assert.IsTrue(Regex.IsMatch(item.ToString(), e.Output)); } }