Fix bugs in sizing TableLayoutPanel (Xamarin bug 18638)
[mono.git] / mcs / class / System.ComponentModel.Composition / Tests / ComponentModelUnitTest / System / ComponentModel / Composition / Factories / PartDefinitionFactory.DerivedComposablePartDefinition.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.Linq;\r
7 using Microsoft.VisualStudio.TestTools.UnitTesting;\r
8 using System.ComponentModel.Composition.Primitives;\r
9 \r
10 namespace System.ComponentModel.Composition.Factories\r
11 {\r
12     partial class PartDefinitionFactory\r
13     {\r
14         private class DerivedComposablePartDefinition : ComposablePartDefinition\r
15         {\r
16             private readonly Func<ComposablePart> _partCreator;\r
17             private readonly IDictionary<string, object> _metadata;\r
18             private IEnumerable<ImportDefinition> _importDefinitions;\r
19             private IEnumerable<ExportDefinition> _exportDefinitions;\r
20             private readonly Func<IEnumerable<ImportDefinition>> _importsCreator;\r
21             private readonly Func<IEnumerable<ExportDefinition>> _exportsCreator;\r
22 \r
23 \r
24             public DerivedComposablePartDefinition(\r
25                 IDictionary<string, object> metadata,\r
26                 Func<ComposablePart> partCreator,\r
27                 Func<IEnumerable<ImportDefinition>> importsCreator,\r
28                 Func<IEnumerable<ExportDefinition>> exportsCreator)\r
29             {\r
30                 this._metadata = metadata.AsReadOnly();\r
31                 this._partCreator = partCreator;\r
32                 this._importsCreator = importsCreator;\r
33                 this._exportsCreator = exportsCreator;\r
34             }\r
35 \r
36             public override IDictionary<string, object> Metadata\r
37             {\r
38                 get { return this._metadata; }\r
39             }\r
40 \r
41             public override IEnumerable<ExportDefinition> ExportDefinitions\r
42             {\r
43                 get \r
44                 {\r
45                     if (this._exportDefinitions == null)\r
46                     {\r
47                         this._exportDefinitions = this._exportsCreator.Invoke() ?? Enumerable.Empty<ExportDefinition>();\r
48                     }\r
49                     return this._exportDefinitions; \r
50                 }\r
51             }\r
52 \r
53             public override IEnumerable<ImportDefinition> ImportDefinitions\r
54             {\r
55                 get\r
56                 {\r
57                     if (this._importDefinitions == null)\r
58                     {\r
59                         this._importDefinitions = this._importsCreator.Invoke() ?? Enumerable.Empty<ImportDefinition>();\r
60                     }\r
61                     return this._importDefinitions;\r
62                 }\r
63             }\r
64 \r
65             public override ComposablePart CreatePart()\r
66             {\r
67                 return this._partCreator();\r
68             }\r
69         }\r
70     }\r
71 }