1 // -----------------------------------------------------------------------
\r
2 // Copyright (c) Microsoft Corporation. All rights reserved.
\r
3 // -----------------------------------------------------------------------
\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
15 namespace System.ComponentModel.Composition.ReflectionModel
\r
17 internal class ReflectionMemberExportDefinition : ExportDefinition, ICompositionElement
\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
24 public ReflectionMemberExportDefinition(LazyMemberInfo member, ExportDefinition exportDefinition, ICompositionElement origin)
\r
26 Assumes.NotNull(exportDefinition);
\r
28 this._member = member;
\r
29 this._exportDefinition = exportDefinition;
\r
30 this._origin = origin;
\r
33 public override string ContractName
\r
35 get { return this._exportDefinition.ContractName; }
\r
38 public LazyMemberInfo ExportingLazyMember
\r
40 get { return this._member; }
\r
43 public override IDictionary<string, object> Metadata
\r
47 if (this._metadata == null)
\r
49 var metadata = this._exportDefinition.Metadata ?? MetadataServices.EmptyMetadata;
\r
50 this._metadata = metadata.AsReadOnly();
\r
52 return this._metadata;
\r
56 string ICompositionElement.DisplayName
\r
58 get { return this.GetDisplayName(); }
\r
61 ICompositionElement ICompositionElement.Origin
\r
63 get { return this._origin; }
\r
66 public override string ToString()
\r
68 return this.GetDisplayName();
\r
71 public ExportingMember ToExportingMember()
\r
73 return new ExportingMember(this, this.ToReflectionMember());
\r
76 private ReflectionMember ToReflectionMember()
\r
78 return this.ExportingLazyMember.ToReflectionMember();
\r
81 private string GetDisplayName()
\r
83 return string.Format(CultureInfo.CurrentCulture,
\r
84 "{0} (ContractName=\"{1}\")", // NOLOC
\r
85 this.ToReflectionMember().GetDisplayName(),
\r