This documentation is archived and is not being maintained.

IExtenderProviderService Interface

Provides an interface for adding and removing extender providers at design time.

Namespace:  System.ComponentModel.Design
Assembly:  System (in System.dll)

public interface IExtenderProviderService

The IExtenderProviderService type exposes the following members.

Public methodAddExtenderProviderAdds the specified extender provider.
Public methodRemoveExtenderProviderRemoves the specified extender provider.

Typically, only components that have been added to a container offer extender providers. The IExtenderProviderService allows you to extend this capability to objects that are not in the container.

The following example demosntrates using the IExtenderProviderService from a designer to add and remove an IExtenderProvider implementation.

using System;
using System.Collections;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Windows.Forms;
using System.Windows.Forms.Design;

namespace ExtenderServiceExample
    // This designer adds a ComponentExtender extender provider, 
    // and removes it when the designer is destroyed.
    public class ExtenderServiceDesigner : System.Windows.Forms.Design.ControlDesigner
        // A local reference to an obtained IExtenderProviderService.
        private IExtenderProviderService localExtenderServiceReference;
        // An IExtenderProvider that this designer supplies.
        private ComponentExtender extender;

        public ExtenderServiceDesigner()

        public override void Initialize(System.ComponentModel.IComponent component)

            // Attempts to obtain an IExtenderProviderService.
            IExtenderProviderService extenderService = (IExtenderProviderService)component.Site.GetService(typeof(IExtenderProviderService));
            if( extenderService != null )
                // If the service was obtained, adds a ComponentExtender 
                // that adds an "ExtenderIndex" integer property to the 
                // designer's component.
                extender = new ComponentExtender();                
                extenderService.AddExtenderProvider( extender );
                localExtenderServiceReference = extenderService;
                MessageBox.Show("Could not obtain an IExtenderProviderService.");

        protected override void Dispose(bool disposing)
            // Removes any previously added extender provider.
            if( localExtenderServiceReference != null )
                localExtenderServiceReference.RemoveExtenderProvider( extender );
                localExtenderServiceReference = null;

    // IExtenderProviderImplementation that adds an integer property 
    // named "ExtenderIndex" to any design-mode document object.
    [ProvidePropertyAttribute("ExtenderIndex", typeof(IComponent))]
    public class ComponentExtender : System.ComponentModel.IExtenderProvider
        // Stores the value of the property to extend a component with.
        public int index = 0;        

        public ComponentExtender()

        public bool CanExtend(object extendee)
            // Extends any type of object.
            return true;

        public int GetExtenderIndex(IComponent component)
            return index;

        public void SetExtenderIndex(IComponent component, int index)
            this.index = index;

    // Example UserControl associated with the ExtenderServiceDesigner.
    public class ExtenderServiceTestControl : System.Windows.Forms.UserControl
        public ExtenderServiceTestControl()

.NET Framework

Supported in: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.