1 // -----------------------------------------------------------------------
\r
2 // Copyright (c) Microsoft Corporation. All rights reserved.
\r
3 // -----------------------------------------------------------------------
\r
5 using System.Collections.Generic;
\r
6 using System.ComponentModel.Composition.Factories;
\r
8 using Microsoft.VisualStudio.TestTools.UnitTesting;
\r
9 using System.ComponentModel.Composition.Primitives;
\r
11 namespace System.ComponentModel.Composition
\r
13 internal class ImportingComposablePart : ComposablePart
\r
15 private readonly List<ImportDefinition> _importDefinitions = new List<ImportDefinition>();
\r
16 private readonly List<ExportDefinition> _exportDefinitions = new List<ExportDefinition>();
\r
17 private Dictionary<ImportDefinition, object> _importValues = new Dictionary<ImportDefinition, object>();
\r
19 public ImportingComposablePart(ImportCardinality cardinality, bool isRecomposable, params string[] contractNames)
\r
20 : this((string)null, cardinality, isRecomposable, contractNames)
\r
24 public ImportingComposablePart(string exportContractName, ImportCardinality cardinality, bool isRecomposable, params string[] contractNames)
\r
26 if (exportContractName != null)
\r
28 var definition = ExportDefinitionFactory.Create(exportContractName);
\r
30 _exportDefinitions.Add(definition);
\r
33 foreach (string contractName in contractNames)
\r
35 var definition = ImportDefinitionFactory.Create(contractName,
\r
40 _importDefinitions.Add(definition);
\r
44 public ImportingComposablePart(params ImportDefinition[] importDefintions)
\r
46 _importDefinitions.AddRange(importDefintions);
\r
49 public override IEnumerable<ExportDefinition> ExportDefinitions
\r
51 get { return this._exportDefinitions; }
\r
54 public override IEnumerable<ImportDefinition> ImportDefinitions
\r
56 get { return this._importDefinitions; }
\r
59 public override IDictionary<string, object> Metadata
\r
61 get { return new Dictionary<string, object>(); }
\r
64 public int ImportSatisfiedCount
\r
70 public void ResetImportSatisfiedCount()
\r
72 ImportSatisfiedCount = 0;
\r
79 Assert.AreEqual(1, _importValues.Count);
\r
81 return _importValues.Values.First();
\r
85 public object GetImport(string contractName)
\r
87 foreach (var pair in _importValues)
\r
89 var definition = (ContractBasedImportDefinition)pair.Key;
\r
90 if (definition.ContractName == contractName)
\r
99 public object GetImport(ImportDefinition definition)
\r
101 Assert.IsTrue(_importValues.ContainsKey(definition));
\r
102 return _importValues[definition];
\r
105 public override object GetExportedValue(ExportDefinition definition)
\r
111 public override void SetImport(ImportDefinition definition, IEnumerable<Export> exports)
\r
113 Assert.IsTrue(_importDefinitions.Contains(definition));
\r
115 ImportSatisfiedCount++;
\r
117 _importValues[definition] = GetExportValue(exports);
\r
120 public void ResetImport(ImportDefinition definition)
\r
122 Assert.IsTrue(_importDefinitions.Contains(definition));
\r
123 _importValues[definition] = null;
\r
126 private object GetExportValue(IEnumerable<Export> exports)
\r
128 var exportedValues = exports.Select(export => export.Value);
\r
130 int count = exportedValues.Count();
\r
135 else if (count == 1)
\r
137 return exportedValues.First();
\r
140 return exportedValues.ToArray();
\r