閱讀英文

共用方式為


ITypeDescriptorContext 介面

定義

提供元件的內容資訊,例如其容器和屬性描述項。

C#
public interface ITypeDescriptorContext : IServiceProvider
C#
[System.Runtime.InteropServices.ComVisible(true)]
public interface ITypeDescriptorContext : IServiceProvider
衍生
屬性
實作

範例

下列程式代碼範例示範如何使用 ITypeDescriptorContext 介面來支援類型轉換。

C#
namespace Microsoft.Samples.InstanceDescriptorSample
{
    using System;
    using System.ComponentModel;
    using System.ComponentModel.Design.Serialization;
    using System.Drawing;
    using System.Globalization;
    using System.Reflection;

    //  This sample shows how to support code generation for a custom type 
    //  of object using a type converter and InstanceDescriptor objects.

    //  To use this code, copy it to a file and add the file to a project. 
    //  Then add a component to the project and declare a Triangle field and 
    //  a public property with accessors for the Triangle field on the component.

    //  The Triangle property will be persisted using code generation.

    [TypeConverter(typeof(Triangle.TriangleConverter))]
    public class Triangle
    {
        // Triangle members.
        Point P1;
        Point P2;
        Point P3;

        public Point Point1 {
            get {
                return P1;
            }
            set {
                P1 = value;
            }
        }
        public Point Point2 {
            get 
            {
                return P2;
            }
            set 
            {
                P2 = value;
            }
        }
        public Point Point3 {
            get 
            {
                return P3;
            }
            set 
            {
                P3 = value;
            }
        }

        public Triangle(Point point1,Point point2,Point point3) {
            P1 = point1;
            P2 = point2;
            P3 = point3;
        }

        // A TypeConverter for the Triangle object.  Note that you can make it internal,
        //  private, or any scope you want and the designers will still be able to use
        //  it through the TypeDescriptor object.  This type converter provides the
        //  capability to convert to an InstanceDescriptor.  This object can be used by 
    //  the .NET Framework to generate source code that creates an instance of a 
    //  Triangle object.
        internal class TriangleConverter : TypeConverter
        {
            // This method overrides CanConvertTo from TypeConverter. This is called when someone
            //  wants to convert an instance of Triangle to another type.  Here,
            //  only conversion to an InstanceDescriptor is supported.
            public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
            {
                if (destinationType == typeof(InstanceDescriptor))
                {
                    return true;
                }

                // Always call the base to see if it can perform the conversion.
                return base.CanConvertTo(context, destinationType);
            }

            // This code performs the actual conversion from a Triangle to an InstanceDescriptor.
            public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
            {
                if (destinationType == typeof(InstanceDescriptor))
                {
                    ConstructorInfo ci = typeof(Triangle).GetConstructor(new Type[]{typeof(Point),
                                                    typeof(Point),typeof(Point)});
                    Triangle t = (Triangle) value;
                    return new InstanceDescriptor(ci,new object[]{t.Point1,t.Point2,t.Point3});
                }

                // Always call base, even if you can't convert.
                return base.ConvertTo(context, culture, value, destinationType);
            }
        }
    }

    public class TestComponent : System.ComponentModel.Component 
    {
        Triangle myTriangle;

        public TestComponent() {
            myTriangle = new Triangle(
                new Point(5,5),
                new Point(10,10),
                new Point(1,8)
                );
        }

        public Triangle MyTriangle {
            get {
                return myTriangle;
            }
            set {
                myTriangle = value;
            }
        }
    }
}

備註

介面 ITypeDescriptorContext 提供有關元件的內容資訊。 ITypeDescriptorContext 通常用於設計時間,以提供設計時間容器的相關信息。 此介面通常用於類型轉換。 如需詳細資訊,請參閱 TypeConverter

注意

設計類型轉換器時,請勿依賴此介面的存在。 如果需要特定介面、屬性或服務,但無法使用,則類型轉換器應該傳回 ,而不是擲回 null 例外狀況。 此介面的屬性可以隨時傳回 null ,您應該為此進行規劃。

屬性

Container

取得表示這個 TypeDescriptor 要求的容器。

Instance

取得與這個型別描述項要求關聯的物件。

PropertyDescriptor

取得與指定內容項目關聯的 PropertyDescriptor

方法

GetService(Type)

取得指定類型的服務物件。

(繼承來源 IServiceProvider)
OnComponentChanged()

引發 ComponentChanged 事件。

OnComponentChanging()

引發 ComponentChanging 事件。

擴充方法

GetKeyedService<T>(IServiceProvider, Object)

IServiceProvider取得 型別T的服務。

GetKeyedServices(IServiceProvider, Type, Object)

IServiceProvider取得 型serviceType別服務的列舉。

GetKeyedServices<T>(IServiceProvider, Object)

IServiceProvider取得 型T別服務的列舉。

GetRequiredKeyedService(IServiceProvider, Type, Object)

IServiceProvider取得 型別serviceType的服務。

GetRequiredKeyedService<T>(IServiceProvider, Object)

IServiceProvider取得 型別T的服務。

CreateAsyncScope(IServiceProvider)

建立可用來解析已設定範圍服務的新 AsyncServiceScope

CreateScope(IServiceProvider)

建立可用來解析已設定範圍服務的新 IServiceScope

GetRequiredService(IServiceProvider, Type)

IServiceProvider 取得 serviceType 類型的服務。

GetRequiredService<T>(IServiceProvider)

IServiceProvider 取得 T 類型的服務。

GetService<T>(IServiceProvider)

IServiceProvider 取得 T 類型的服務。

GetServices(IServiceProvider, Type)

IServiceProvider 取得類型 serviceType 服務的列舉。

GetServices<T>(IServiceProvider)

IServiceProvider 取得類型 T 服務的列舉。

GetFakeLogCollector(IServiceProvider)

取得 對象,這個物件會收集傳送至假記錄器的記錄檔記錄。

GetFakeRedactionCollector(IServiceProvider)

從相依性插入容器取得假的重構函式收集器實例。

適用於

產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

另請參閱