// ----------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. // ----------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Linq; using Microsoft.VisualStudio.TestTools.UnitTesting; using System.ComponentModel.Composition.Primitives; namespace System.ComponentModel.Composition.Factories { partial class PartDefinitionFactory { private class DerivedComposablePartDefinition : ComposablePartDefinition { private readonly Func _partCreator; private readonly IDictionary _metadata; private IEnumerable _importDefinitions; private IEnumerable _exportDefinitions; private readonly Func> _importsCreator; private readonly Func> _exportsCreator; public DerivedComposablePartDefinition( IDictionary metadata, Func partCreator, Func> importsCreator, Func> exportsCreator) { this._metadata = metadata.AsReadOnly(); this._partCreator = partCreator; this._importsCreator = importsCreator; this._exportsCreator = exportsCreator; } public override IDictionary Metadata { get { return this._metadata; } } public override IEnumerable ExportDefinitions { get { if (this._exportDefinitions == null) { this._exportDefinitions = this._exportsCreator.Invoke() ?? Enumerable.Empty(); } return this._exportDefinitions; } } public override IEnumerable ImportDefinitions { get { if (this._importDefinitions == null) { this._importDefinitions = this._importsCreator.Invoke() ?? Enumerable.Empty(); } return this._importDefinitions; } } public override ComposablePart CreatePart() { return this._partCreator(); } } } }