File: System\ComponentModel\Design\ExtenderProviderService.cs
Web Access
Project: src\src\System.Windows.Forms.Design\src\System.Windows.Forms.Design.csproj (System.Windows.Forms.Design)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
namespace System.ComponentModel.Design;
 
/// <summary>
///  The extender provider service actually provides two services: IExtenderProviderService,
///  which allows other objects to add and remove extender providers, and IExtenderListService,
///  which is used by TypeDescriptor to discover the set of extender providers.
/// </summary>
internal sealed class ExtenderProviderService : IExtenderProviderService, IExtenderListService
{
    private List<IExtenderProvider>? _providers;
 
    internal ExtenderProviderService()
    {
    }
 
    /// <summary>
    ///  Gets the set of extender providers for the component.
    /// </summary>
    IExtenderProvider[] IExtenderListService.GetExtenderProviders() =>
        _providers is not null ? ([.. _providers]) : ([]);
 
    /// <summary>
    ///  Adds an extender provider.
    /// </summary>
    void IExtenderProviderService.AddExtenderProvider(IExtenderProvider provider)
    {
        ArgumentNullException.ThrowIfNull(provider);
 
        _providers ??= new(4);
 
        if (_providers.Contains(provider))
        {
            throw new ArgumentException(string.Format(SR.ExtenderProviderServiceDuplicateProvider, provider), nameof(provider));
        }
 
        _providers.Add(provider);
    }
 
    /// <summary>
    ///  Removes an extender provider.
    /// </summary>
    void IExtenderProviderService.RemoveExtenderProvider(IExtenderProvider provider)
    {
        ArgumentNullException.ThrowIfNull(provider);
 
        _providers?.Remove(provider);
    }
}