Fix bugs in sizing TableLayoutPanel (Xamarin bug 18638)
[mono.git] / mcs / class / System.ComponentModel.Composition / src / ComponentModel / System / ComponentModel / Composition / ReflectionModel / ReflectionMemberExportDefinition.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.Hosting;\r
7 using System.ComponentModel.Composition.Primitives;\r
8 using System.ComponentModel.Composition.ReflectionModel;\r
9 using System.Globalization;\r
10 using System.Reflection;\r
11 using Microsoft.Internal;\r
12 using Microsoft.Internal.Collections;\r
13 using System.Threading;\r
14 \r
15 namespace System.ComponentModel.Composition.ReflectionModel\r
16 {\r
17     internal class ReflectionMemberExportDefinition : ExportDefinition, ICompositionElement\r
18     {\r
19         private readonly LazyMemberInfo _member;\r
20         private readonly ExportDefinition _exportDefinition;\r
21         private readonly ICompositionElement _origin;\r
22         private IDictionary<string, object> _metadata;\r
23 \r
24         public ReflectionMemberExportDefinition(LazyMemberInfo member, ExportDefinition exportDefinition, ICompositionElement origin)\r
25         {\r
26             Assumes.NotNull(exportDefinition);\r
27 \r
28             this._member = member;\r
29             this._exportDefinition = exportDefinition;\r
30             this._origin = origin;\r
31         }\r
32 \r
33         public override string ContractName\r
34         {\r
35             get { return this._exportDefinition.ContractName; }\r
36         }\r
37 \r
38         public LazyMemberInfo ExportingLazyMember\r
39         {\r
40             get { return this._member; }\r
41         }\r
42 \r
43         public override IDictionary<string, object> Metadata\r
44         {\r
45             get\r
46             {\r
47                 if (this._metadata == null)\r
48                 {\r
49                     var metadata = this._exportDefinition.Metadata ?? MetadataServices.EmptyMetadata;\r
50                     this._metadata = metadata.AsReadOnly();\r
51                 }\r
52                 return this._metadata;\r
53             }\r
54         }\r
55 \r
56         string ICompositionElement.DisplayName\r
57         {\r
58             get { return this.GetDisplayName(); }\r
59         }\r
60 \r
61         ICompositionElement ICompositionElement.Origin\r
62         {\r
63             get { return this._origin; }\r
64         }\r
65 \r
66         public override string ToString()\r
67         {\r
68             return this.GetDisplayName();\r
69         }\r
70 \r
71         public ExportingMember ToExportingMember()\r
72         {\r
73             return new ExportingMember(this, this.ToReflectionMember());\r
74         }\r
75 \r
76         private ReflectionMember ToReflectionMember()\r
77         {\r
78             return this.ExportingLazyMember.ToReflectionMember();\r
79         }\r
80 \r
81         private string GetDisplayName()\r
82         {\r
83             return string.Format(CultureInfo.CurrentCulture,\r
84                    "{0} (ContractName=\"{1}\")",    // NOLOC\r
85                    this.ToReflectionMember().GetDisplayName(),\r
86                    this.ContractName);\r
87         }\r
88     }\r
89 }\r