Implement MachineKey.Protect and MachineKey.Unprotect
[mono.git] / mcs / class / System.ComponentModel.Composition / src / ComponentModel / System / ComponentModel / Composition / Primitives / SerializableCompositionElement.cs
1 // -----------------------------------------------------------------------\r
2 // Copyright (c) Microsoft Corporation.  All rights reserved.\r
3 // -----------------------------------------------------------------------\r
4 using System;\r
5 using Microsoft.Internal;\r
6 \r
7 namespace System.ComponentModel.Composition.Primitives\r
8 {\r
9     // As most objects that implement ICompositionElement (such as Export, ComposablePart, \r
10     // ComposablePartCatalog, etc) are not serializable, this class is used as a serializable \r
11     // placeholder for these types when ICompositionElement is used within serializable types,\r
12     // such as CompositionException, CompositionIssue, etc.\r
13     [Serializable]\r
14     internal class SerializableCompositionElement : ICompositionElement\r
15     {\r
16         private readonly string _displayName;\r
17         private readonly ICompositionElement _origin;\r
18 \r
19         public SerializableCompositionElement(string displayName, ICompositionElement origin)\r
20         {\r
21 #if !SILVERLIGHT\r
22             Assumes.IsTrue(origin == null || origin.GetType().IsSerializable);\r
23 #endif\r
24             this._displayName = displayName ?? string.Empty;\r
25             this._origin = origin;\r
26         }\r
27 \r
28         public string DisplayName\r
29         {\r
30             get { return this._displayName; }\r
31         }\r
32 \r
33         public ICompositionElement Origin\r
34         {\r
35             get { return this._origin; }\r
36         }\r
37 \r
38         public override string ToString()\r
39         {\r
40             return this.DisplayName;\r
41         }\r
42 \r
43         public static ICompositionElement FromICompositionElement(ICompositionElement element)\r
44         {\r
45             if (element == null)\r
46             {   // Null is always serializable   \r
47 \r
48                 return null;\r
49             }\r
50 \r
51             ICompositionElement origin = FromICompositionElement(element.Origin);\r
52 \r
53             // Otherwise, we need to create a serializable wrapper\r
54             return new SerializableCompositionElement(element.DisplayName, origin);\r
55         }\r
56     }\r
57 }\r