Fix bugs in sizing TableLayoutPanel (Xamarin bug 18638)
[mono.git] / mcs / class / System.ComponentModel.Composition / Tests / ComponentModelUnitTest / System / ComponentModel / Composition / ConcreteComposablePart.cs
1 // -----------------------------------------------------------------------\r
2 // Copyright (c) Microsoft Corporation.  All rights reserved.\r
3 // -----------------------------------------------------------------------\r
4 using System;\r
5 using System.Collections.Generic;\r
6 using System.ComponentModel.Composition;\r
7 using System.Linq;\r
8 using System.ComponentModel.Composition.Factories;\r
9 using System.ComponentModel.Composition.Primitives;\r
10 \r
11 namespace System.ComponentModel.Composition\r
12 {\r
13     internal class ConcreteComposablePart : ComposablePart, IDisposable\r
14     {\r
15         private readonly List<Export> _exports = new List<Export>();\r
16         private readonly List<ImportDefinition> _imports = new List<ImportDefinition>();\r
17         private readonly IDictionary<string, IEnumerable<Export>> _setImports = new Dictionary<string, IEnumerable<Export>>();\r
18 \r
19         public ConcreteComposablePart()\r
20         {\r
21         }\r
22 \r
23         public override IDictionary<string, object> Metadata\r
24         {\r
25             get { return MetadataServices.EmptyMetadata; }\r
26         }\r
27 \r
28         public IDictionary<string, IEnumerable<Export>> SetImports\r
29         {\r
30             get { return this._setImports; }\r
31         }\r
32 \r
33         public override IEnumerable<ExportDefinition> ExportDefinitions\r
34         {\r
35             get { return this._exports.Select(export => export.Definition); }\r
36         }\r
37 \r
38         public override IEnumerable<ImportDefinition> ImportDefinitions\r
39         {\r
40             get { return this._imports; }\r
41         }\r
42 \r
43         public ImportDefinition AddImport(string contractName, ImportCardinality cardinality, bool isRecomposable, bool isPrerequisite)\r
44         {\r
45             var import = ImportDefinitionFactory.CreateDefault(contractName, cardinality, isRecomposable, isPrerequisite);\r
46 \r
47             this.AddImport(import);\r
48             return import;\r
49         }\r
50 \r
51         public void AddImport(ImportDefinition import)\r
52         {\r
53             this._imports.Add(import);\r
54         }\r
55 \r
56         public void AddExport(string contractName, object value)\r
57         {\r
58             this.AddExport(ExportFactory.Create(contractName, () => value));\r
59         }\r
60 \r
61         public void AddExport(Export export)\r
62         {\r
63             this._exports.Add(export);\r
64         }\r
65 \r
66         public override object GetExportedValue(ExportDefinition definition)\r
67         {\r
68             Export export = _exports.First(e => e.Definition == definition);\r
69 \r
70             return export.Value;\r
71         }\r
72 \r
73         public override void SetImport(ImportDefinition definition, IEnumerable<Export> exports)\r
74         {\r
75             ContractBasedImportDefinition contractBasedDefinition = (ContractBasedImportDefinition)definition;\r
76             this._setImports[contractBasedDefinition.ContractName] = exports;\r
77 \r
78             foreach (Export export in exports)\r
79             {\r
80                 var value = export.Value;\r
81             }\r
82         }\r
83 \r
84         void IDisposable.Dispose()\r
85         {\r
86             foreach (var disposable in _exports.Select(export => export.Value).OfType<IDisposable>())\r
87             {\r
88                 disposable.Dispose();\r
89             }\r
90         }\r
91     }\r
92 }\r
93 \r