1 // -----------------------------------------------------------------------
\r
2 // Copyright (c) Microsoft Corporation. All rights reserved.
\r
3 // -----------------------------------------------------------------------
\r
5 using System.Collections.Generic;
\r
7 using Microsoft.VisualStudio.TestTools.UnitTesting;
\r
8 using System.ComponentModel.Composition.Primitives;
\r
10 namespace System.ComponentModel.Composition.Factories
\r
12 partial class PartDefinitionFactory
\r
14 private class DerivedComposablePartDefinition : ComposablePartDefinition
\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
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
30 this._metadata = metadata.AsReadOnly();
\r
31 this._partCreator = partCreator;
\r
32 this._importsCreator = importsCreator;
\r
33 this._exportsCreator = exportsCreator;
\r
36 public override IDictionary<string, object> Metadata
\r
38 get { return this._metadata; }
\r
41 public override IEnumerable<ExportDefinition> ExportDefinitions
\r
45 if (this._exportDefinitions == null)
\r
47 this._exportDefinitions = this._exportsCreator.Invoke() ?? Enumerable.Empty<ExportDefinition>();
\r
49 return this._exportDefinitions;
\r
53 public override IEnumerable<ImportDefinition> ImportDefinitions
\r
57 if (this._importDefinitions == null)
\r
59 this._importDefinitions = this._importsCreator.Invoke() ?? Enumerable.Empty<ImportDefinition>();
\r
61 return this._importDefinitions;
\r
65 public override ComposablePart CreatePart()
\r
67 return this._partCreator();
\r