이 문서는 기계 번역을 이용하여 번역되었습니다. 문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문
Visual Studio 2017을 사용하는 것이 좋습니다.

IVsDataSupportObject<T> 인터페이스

데이터 지원 XML 스트림에 제공 된 참조 정보를 기반으로 만들어진 개체를 나타냅니다.

네임스페이스:  Microsoft.VisualStudio.Data.Core
어셈블리:  Microsoft.VisualStudio.Data.Core(Microsoft.VisualStudio.Data.Core.dll)

public interface IVsDataSupportObject<T>
where T : class

형식 매개 변수

T

매개 변수의 형식입니다.

IVsDataSupportObject<T> 형식에서는 다음과 같은 멤버를 노출합니다.

  이름설명
Public 메서드Invoke추가 없습니다의 메서드 시그니처에 있는 매개 변수를 사용 하 여 개체의 메서드를 호출합니다.
위쪽

DDEX 아키텍처는 주로 데이터 확장성 개체 모델 또는 계층적 데이터 소스를 나타내는 등의 복잡 한 영역에 대 한 기반입니다. 이 위해서는 지원 엔터티는 호출자에 게 알려진된 스키마와 일치 하는 XML 스트림을 반환 하는 것이 목적인 만들었습니다. 호출자가이 XML을 해석 하 고 확장성의 해당 영역을 제어 하는 사용 하 여 합니다.

이 접근 방법의 일환으로 종종 XML 스트림을 다시 코드 형식으로 관리 되는 형식 이름에 대 한 참조가 포함 되어 있습니다. 사용 하는 XML 스트림의 소비자는 GetType 이러한 해결 방법 실제 형식으로 이름을 지정 하 고 다음 적절 하 게 이러한 형식의 인스턴스를 만듭니다. 형식 참조를 종종 주위의 XML 스키마 인스턴스를 같은 형식의 여러 상황에서 사용할 수 있도록 하는 전달 된 매개 변수 집합이 포함 되어 있습니다.

한이 실제로의 IVsDataObjectSelector 엔터티를 지원 합니다. 이 지원 엔터티 데이터 개체를 지 원하는 XML 스트림 데이터 원본 개체 형식, 테이블 또는 저장된 프로시저와 같은 정보를 지정 부분에서 참조 됩니다. 내부 식별자 형식의 개체를 나타내는 단일 매개 변수를 사용 하 여 검색 하는 선택기 구현을 작성할 수 및 다음 개체 지원에서 XML을 포함 시킬 각 형식에 대 한 선택기 참조에서이 매개 변수의 올바른 값입니다.

이러한 매개 변수를 전달 방법 지원 엔터티에 추가 메서드 또는 매개 변수가 있는이 시나리오를 사용 하려면 매개 변수를 추가할 필요 없이 사용할 수 있도록이 인터페이스의 용도입니다. 이 공급자의 구현에 의해 적절 하 게 처리 되는 런타임에 바인딩된 메서드 호출 방법을 사용 하 여 수행 됩니다. 단일 인터페이스 정의 Invoke 메서드 호출자에 게 전달 메서드를 호출 하려면 해당 인수를 일반 집합과 특수화 메서드의 동작은 매개 변수 집합의 이름입니다. 형식 매개 변수는 호출자에 따라 달라 집니다. 예를 들어, XML에서 매개 변수를 입력 하는 방법 및 이러한 매개 변수 구현에 전달 하는 매개 변수 개체 배열로 변환 합니다 방법을 정의 하는 데이터 개체 지원 XML 스키마에 달려 있습니다.

다음 코드를 구현 하는 단일 형식에 대 한 참조를 포함 하 여 두 데이터 개체 형식에 대 한 정보를 정의 하는 데이터 개체 지원 XML 예제는 DSRefBuilder 이러한 형식에 대 한 서비스입니다. 다음 코드 구현 하는 IDSRefBuilder 인터페이스로 데이터 지원 개체입니다. XML 각 형식에 대해 다른 매개 변수를 전달 하 고 선택기 구현을 선택 된 매개 변수에 따라 두 개의 다른 코드 경로 보여 줍니다. 코드 작업을 수행 하는 다른 API에서 매개 변수를 전달할 경우 예를 들어 특정 값을 인식 하지 못하는 더 일반적인 경우에 매개 변수 값은 보다 일반적인 방식으로 사용 됩니다는 note입니다.

XML:

<Type name="Table">
    <Identifier>
        <Part name="Name" />
    </Identifier>
    <Properties>
        <Property name="Id" type="System.Int32" />
    </Properties>
    <Services>
        <Service type="IDSRefBuilder"
            implementationType="MyDSRefBuilder">
            <Parameters method="AppendToDSRef">
                <Parameter value="DSREFTYPE_TABLE" />
            </Parameters>
        </Service>
    </Services>
</Type>
<Type name="View">
    <Identifier>
        <Part name="Name" />
    </Identifier>
    <Properties>
        <Property name="Id" type="System.Int32" />
    </Properties>
    <Services>
        <Service type="IDSRefBuilder"
            implementationType="MyDSRefBuilder">
            <Parameters method="AppendToDSRef">
                <Parameter value="DSREFTYPE_VIEW" />
            </Parameters>
        </Service>
    </Services>
</Type>
using System;
using Microsoft.VisualStudio.Data.Core;
using Microsoft.VisualStudio.Data.Services.SupportEntities;
using Microsoft.VisualStudio.Data.Services.SupportEntities.Interop;

internal class MyDSRefBuilder : IDSRefBuilder,
    IVsDataSupportObject<IDSRefBuilder>
{
    public void AppendToDSRef(
        object dsRef, string typeName, object[] identifier)
    {
        AppendToDSRef(dsRef, typeName, identifier, null);
    }

    object IVsDataSupportObject<IDSRefBuilder>.Invoke(
        string name, object[] args, object[] parameters)
    {
        if (name == null)
        {
            throw new ArgumentNullException("name");
        }
        if (name.Equals("AppendToDSRef", StringComparison.Ordinal))
        {
            if (args == null || args.Length != 3)
            {
                throw new ArgumentException();
            }
            AppendToDSRef(args[0], args[1] as string,
                args[2] as object[], parameters);
            return null;
        }
        throw new ArgumentException();
    }

    private void AppendToDSRef(object dsRef,
        string typeName, object[] identifier, object[] parameters)
    {
        if (parameters == null || parameters.Length == 0)
        {
            throw new ArgumentException();
        }
        string dsRefType = parameters[0] as string;
        if (dsRefType.Equals("DSREFTYPE_TABLE"))
        {
            AppendTableToDSRef(dsRef, identifier);
        }
        else if (dsRefType.Equals("DSREFTYPE_VIEW"))
        {
            AppendViewToDSRef(dsRef, identifier);
        }
    }

    private void AppendTableToDSRef(object dsRef, object[] identifier)
    {
        // Append table
    }

    private void AppendViewToDSRef(object dsRef, object[] identifier)
    {
        // Append view
    }
}
표시: