File: System\ComponentModel\Composition\Hosting\CompositionBatch.SingleExportComposablePart.cs
Web Access
Project: src\src\libraries\System.ComponentModel.Composition\src\System.ComponentModel.Composition.csproj (System.ComponentModel.Composition)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Collections.Generic;
using System.ComponentModel.Composition.Primitives;
using System.Linq;
using Microsoft.Internal;
 
namespace System.ComponentModel.Composition.Hosting
{
    public partial class CompositionBatch
    {
        // Represents a part that exports a single export
        private sealed class SingleExportComposablePart : ComposablePart
        {
            private readonly Export _export;
 
            public SingleExportComposablePart(Export export)
            {
                ArgumentNullException.ThrowIfNull(export);
 
                _export = export;
            }
 
            public override IDictionary<string, object?> Metadata
            {
                get { return MetadataServices.EmptyMetadata; }
            }
 
            public override IEnumerable<ExportDefinition> ExportDefinitions
            {
                get { return new ExportDefinition[] { _export.Definition }; }
            }
 
            public override IEnumerable<ImportDefinition> ImportDefinitions
            {
                get { return Enumerable.Empty<ImportDefinition>(); }
            }
 
            public override object? GetExportedValue(ExportDefinition definition)
            {
                Requires.NotNull(definition, nameof(definition));
 
                if (definition != _export.Definition)
                {
                    throw ExceptionBuilder.CreateExportDefinitionNotOnThisComposablePart(nameof(definition));
                }
 
                return _export.Value;
            }
 
            public override void SetImport(ImportDefinition definition, IEnumerable<Export> exports)
            {
                Requires.NotNull(definition, nameof(definition));
                Requires.NotNullOrNullElements(exports, nameof(exports));
 
                throw ExceptionBuilder.CreateImportDefinitionNotOnThisComposablePart(nameof(definition));
            }
        }
    }
}