형식 변환기 또는 태그 확장에서 사용할 수 있는 서비스 컨텍스트Service Contexts Available to Type Converters and Markup Extensions

형식 변환기 및 태그 확장 사용을 지원하는 형식의 작성자에는 태그 또는 주변 개체 그래프 구조에서 사용하는 경우에 대한 컨텍스트 정보를 포함해야 할 수 있습니다.Authors of the types that support type converter and markup extension usages must often have contextual information about where a usage is located in the markup, or in surrounding object graph structure. 제공된 개체를 올바르게 인스턴스화하거나 개체 그래프의 기존 개체에 대한 개체 참조를 만들 수 있도록 정보가 필요할 수 있습니다.Information might be needed so that the provided object is instantiated correctly or so that object references to existing objects in the object graph can be made. .NET Framework XAML 서비스를 사용할 경우 필요할 수 있는 컨텍스트는 일련의 서비스 인터페이스로 표시됩니다.When using .NET Framework XAML Services, the context that might be required is exposed as a series of service interfaces. 형식 변환기 또는 태그 확장 지원 코드에서는 XamlObjectWriter 또는 관련 형식에서 사용 가능하고 통과되는 서비스 공급자 컨텍스트를 사용하여 서비스를 쿼리할 수 있습니다.Type converter or markup extension support code can query for a service by using a service provider context that is available and passed through from XamlObjectWriter or related types. XAML 스키마 컨텍스트는 이러한 한 서비스를 통해 직접 사용할 수 있습니다.The XAML schema context is directly available through one such service. 이 항목에서는 값 변환기 구현에서 서비스 컨텍스트에 액세스하는 방법을 설명하고 일반적으로 사용 가능한 서비스 및 해당 역할을 나열합니다.This topic describes how to access service contexts from a value converter implementation, and lists typically available services and their roles.

서비스 가져오기Obtaining Services

값 변환기의 구현자는 값 변환기가 적용되는 컨텍스트의 몇몇 형식에 액세스해야 할 수 있습니다.As an implementer of a value converter, you often need access to some type of context in which the value converter is applied. 이 컨텍스트에는 활성 XAML 스키마 컨텍스트와 같은 정보, XAML 스키마 컨텍스트 및 XAML 개체 작성기에서 제공하는 형식 매핑 시스템에 대한 액세스 권한 등이 포함될 수 있습니다.This context might include information such as the active XAML schema context, access to the type mapping system that the XAML schema context and XAML object writer provide, and so on. 태그 확장 또는 형식 변환기 구현에 사용할 수 있는 서비스는 각 가상 메서드의 서명 일부인 컨텍스트 매개 변수를 통해 전달됩니다.The services available for a markup extension or type converter implementation are communicated through the context parameters that are part of the signature of each virtual method. 모든 경우에 컨텍스트에 IServiceProvider가 구현되어 있고 IServiceProvider.GetService를 호출하여 서비스를 요청할 수 있습니다.In every case, you have IServiceProvider implemented in the context, and can call IServiceProvider.GetService to request a service.

태그 확장에 대한 서비스Services for a Markup Extension

MarkupExtension 에는 단 하나의 가상 메서드 ProvideValue가 있습니다.MarkupExtension has only one virtual method, ProvideValue. 입력 serviceProvider 매개 변수는 태그 확장이 XAML 프로세서에서 호출될 때 서비스가 구현에 전달되는 방법입니다.The input serviceProvider parameter is how the services are communicated to implementations when the markup extension is called by a XAML processor. 다음 의사 코드에서는 태그 확장 구현이 ProvideValue에서 서비스를 쿼리하는 방법을 보여 줍니다.The following pseudocode illustrates how a markup extension implementation might query for services in its ProvideValue:

public override object ProvideValue(IServiceProvider serviceProvider)  
{  
...  
    // Get the IXamlTypeResolver from the service provider  
    if (serviceProvider == null)  
    {  
        throw new ArgumentNullException("serviceProvider");  
    }  
    IXamlTypeResolver xamlTypeResolver = serviceProvider.GetService(typeof(IXamlTypeResolver)) as IXamlTypeResolver;  
    if (xamlTypeResolver == null)  
   {  
        throw new ArgumentException("IXamlTypeResolver"));  
    }  
...  
}  

형식 변환기에 대한 서비스Services for a Type Converter

TypeConverter 에는 서비스 컨텍스트를 사용하고 XAML 사용을 지원하는 가상 메서드 4개가 있습니다.TypeConverter has four virtual methods that use a service context and that support XAML usages. 이들 메서드는 각각 입력 context 매개 변수를 전달합니다.Each of these methods passes an input context parameter. 이 매개 변수는 ITypeDescriptorContext형식이지만 해당 인터페이스는 IServiceProvider를 상속하므로 형식 컨버터 구현에 GetService 메서드를 사용할 수 있습니다.This parameter is of type ITypeDescriptorContext, but that interface inherits IServiceProvider, and therefore, there is a GetService method available to type converter implementations.

다음 의사 코드에서는 XAML 사용에 대한 형식 변환기 구현이 재정의의 하나에서 서비스를 쿼리할 수 있습니다(이 경우 ConvertFrom).The following pseudocode illustrates how a type converter implementation for XAML usages might query for services in one of its overrides, in this case ConvertFrom:

public override object ConvertFrom(ITypeDescriptorContext typeDescriptorContext,  
  CultureInfo cultureInfo,  
  object source)  
{  
    IRootObjectProvider rootProvider = typeDescriptorContext.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider;  
    if (rootProvider != null && source is String)  
    {  
        //return something, else ...  
    }  
    throw GetConvertFromException(source);  
}  

값 Serializer에 대한 서비스Services for a Value Serializer

값 serializer 컨텍스트의 경우 ValueSerializer 클래스, IValueSerializerContext에 특정한 서비스 공급자 형식을 사용합니다.For value serializer context, you use a service provider type that is specific to the ValueSerializer class, IValueSerializerContext. 해당 컨텍스트는 ValueSerializer 가상 메서드 4개의 재정의에 전달됩니다.That context is passed to overrides of the four ValueSerializer virtual methods. 컨텍스트에서 GetService 를 호출하여 서비스를 가져옵니다.Call GetService from the context to obtain services.

XAML 서비스 공급자 컨텍스트 사용Using the XAML Service Provider Contexts

태그 확장 또는 형식 변환기에 사용할 수 있는 XAML 서비스에 대한 GetService 액세스의 서비스 공급자는 내부 클래스로 구현되고, 관련 컨텍스트에 전달된 방법 및 인터페이스를 통해서만 표시됩니다.The service provider for GetService access to XAML services available to markup extensions or type converters is implemented as an internal class, with exposure only through the interface and how it is passed into the relevant context . 로드 경로 또는 저장 경로의 기본 .NET Framework XAML 서비스 구현에서 XAML 처리 작업이 서비스 컨텍스트에 필요한 관련 태그 확장 또는 형식 변환기 메서드를 호출할 때마다 이 내부 개체가 전달됩니다.Whenever a XAML processing operation in the default .NET Framework XAML Services implementations of load path or save path invokes the relevant markup extension or type converter methods that require a service context, this internal object is passed. 상황에 따라 시스템 서비스 컨텍스트는 MarkupExtensionContext 또는 TextSyntaxContext를 제공하지만 이들 두 클래스의 고유 정보는 내부용입니다.Depending on the circumstance, the system service context provides either MarkupExtensionContext or TextSyntaxContext, but the specifics of both of these classes are internal. 이들 클래스와의 상호 작용은 GetService를 통해 클래스에서 서비스를 요청하는 것으로 제한됩니다.Your interaction with these classes is limited to requesting services from them, through GetService.

.NET Framework XAML 서비스 컨텍스트에서 사용 가능한 서비스Available Services from the .NET Framework XAML Service Context

.NET Framework XAML 서비스에서는 태그 확장, 형식 변환기, 값 serializer 및 잠재적으로 기타 사용에 대한 서비스를 정의합니다..NET Framework XAML Services defines services for markup extensions, type converters, value serializers, and potentially other usages. 다음 섹션에서는 이들 서비스를 각각 설명하고 서비스가 구현에서 사용하는 방법에 대한 지침을 제공합니다.The following sections describe each of these services and provide guidance about how the service might be used in an implementation.

IServiceProviderIServiceProvider

참조 설명서: IServiceProviderReference documentation: IServiceProvider

관련: 를 호출할 IServiceProvider.GetService수 있도록 .NET Framework에서 서비스 기반 인프라의 기본 작업입니다.Relevant to: Basic operation of a service-based infrastructure in the .NET Framework so that you can call IServiceProvider.GetService.

ITypeDescriptorContextITypeDescriptorContext

참조 설명서: ITypeDescriptorContextReference documentation: ITypeDescriptorContext

IServiceProvider에서 파생됩니다.Derives from IServiceProvider. 이 클래스는 표준 TypeConverter 서명, TypeConverter 의 컨텍스트가 .NET Framework 1.0부터 있었던 클래스임을 나타냅니다.This class represents context in the standard TypeConverter signatures; TypeConverter is a class that has existed since .NET Framework 1.0. 이 클래스는 문자열-값 형식 변환을 위한 XAML 및 XAML TypeConverter 시나리오보다 오래되었습니다.It predates XAML and the XAML TypeConverter scenario for string-value type conversion. .NET Framework XAML 서비스 컨텍스트에서 TypeConverter 의 메서드는 명시적으로 구현됩니다.In the .NET Framework XAML Services context, methods of TypeConverter are implemented explicitly. 명시적 구현의 동작은 호출자에게 ITypeDescriptorContext API가 XAML 형식 시스템과 관련되거나 XAML에서 개체 읽기 또는 쓰기와 관련되지 않음을 나타냅니다.The explicit implementation's behavior indicates to callers that the ITypeDescriptorContext API is not relevant for XAML type systems, or for reading or writing objects from XAML. Container, Instance, 및 PropertyDescriptor 는 일반적으로 .NET Framework XAML 서비스 컨텍스트에서 null 을 반환합니다.Container, Instance, and PropertyDescriptor generally return null from .NET Framework XAML Services contexts.

IValueSerializerContextIValueSerializerContext

참조 설명서: IValueSerializerContextReference documentation: IValueSerializerContext

ITypeDescriptorContext 에서 파생되고 명시적 구현을 사용하여 XAML 형식 시스템에 대한 거짓 의미를 방지합니다.Derives from ITypeDescriptorContext and also relies on explicit implementations to suppress false implications about the XAML type system. ValueSerializer에서 정적 조회 도우미 메서드를 지원합니다.Supports the static lookup helper methods on ValueSerializer.

IXamlTypeResolverIXamlTypeResolver

참조 설명서: IXamlTypeResolverReference documentation: IXamlTypeResolver

정의 방법: System.Windows.Markup 네임스페이스, System.Xaml 어셈블리Defined by: System.Windows.Markup namespace, System.Xaml assembly

관련: 로드 경로 시나리오 및 XAML 스키마 컨텍스트와의 상호 작용Relevant to: Load path scenarios, and interaction with XAML schema context

서비스 API: ResolveService API: Resolve

XAML 작성기가 개체 그래프에서 CLR 개체를 생성할 때 필요한 XAML-CLR 형식 매핑에 영향을 미칠 수 있습니다.Can influence the XAML-to-CLR type mapping that is necessary when the XAML writer constructs a CLR object in an object graph. Resolve는 XAML 형식 이름(XamlType.Name)에 해당하는 잠재적으로 접두사로 한정된 문자열을 처리하고 CLR Type을 반환합니다.Resolve processes a potentially prefix-qualified string that corresponds to a XAML type name (XamlType.Name), and returns a CLR Type. 형식 확인은 일반적으로 XAML 스키마 컨텍스트에 따라 크게 달라집니다.Resolving types is typically heavily dependent on XAML schema context. XAML 스키마 컨텍스트는 어떤 어셈블리가 로드되는지, 그리고 형식 확인을 위해 어떤 어셈블리에 액세스할 수 있거나 액세스해야 하는지 등의 고려 사항만 인식합니다.Only the XAML schema context is aware of considerations such as which assemblies are loaded, and which of these assemblies can or should be accessed for type resolution.

IUriContextIUriContext

참조 설명서: IUriContextReference documentation: IUriContext

정의 방법: System.Windows.Markup 네임스페이스, System.Xaml 어셈블리Defined by: System.Windows.Markup namespace, System.Xaml assembly

관련: Uri 또는 x:Uri 값인 멤버 값의 로드 경로 및 저장 경로를 처리 합니다.Relevant to: Load path and save path handling of member values that are URIs or x:Uri values.

서비스 API: BaseUriService API: BaseUri

이 서비스에서는 전체적으로 사용 가능한 URI 루트를 보고합니다(있는 경우).This service reports a globally available URI root, if any. URI 루트를 사용하여 상대 URI를 절대 URI로 확인하거나 그 반대로 확인할 수 있습니다.The URI root can be used to resolve relative URIs to absolute URIs or vice versa. 이 시나리오는 주로 특정 프레임워크를 통해 노출되거나 프레임워크에서 자주 사용되는 루트 요소 클래스의 기능을 통해 노출되는 애플리케이션 서비스와 관련됩니다.This scenario is mainly relevant to application services that are exposed by a particular framework, or capabilities of a frequently used root element class in a framework. 기본 URI는 XAML 판독기 설정으로 설정될 수 있고, 이후 이 URL은 XAML 개체 작성기에 전달되고 이 서비스에 의해 보고됩니다.The base URI can be established as a XAML reader setting, which is then passed through to the XAML object writer and reported by this service.

IAmbientProviderIAmbientProvider

참조 설명서: IAmbientProviderReference documentation: IAmbientProvider

정의 방법: System.Xaml 네임스페이스, System.Xaml 어셈블리Defined by: System.Xaml namespace, System.Xaml assembly

관련: 로드 경로 처리 및 형식 조회 지연과 또는 최적화.Relevant to: Load path handling and type lookup deferrals or optimizations.

서비스 APIs: GetAllAmbientValues, 기타 3개.Service APIs: GetAllAmbientValues, 3 others.

XAML의 외계 개념은 형식의 특정 멤버를 앰비언트로 표시하는 방법입니다.The ambience concept in XAML is a technique for marking a particular member of a type as ambient. 또는 형식 인스턴스를 포함하는 모든 속성 값을 앰비언트 속성으로 간주하도록 형식이 앰비언트일 수 있습니다.Alternatively, a type can be ambient so that all property values that hold an instance of the type should be considered ambient properties. 추가로 XAML 노드 스트림을 따라가고 개체 그래프에서 하위 항목인 태그 확장 또는 형식 변환기는 로드 시 앰비언트 속성 또는 형식 인스턴스에 액세스할 수 있거나 저장 시 앰비언트 구조의 정보를 사용할 수 있습니다.Markup extensions or type converters that are further along the XAML node stream and that are descendants in the object graph can access the ambient property or type instance at load time; or they can use knowledge of the ambient structure at save time. 이는 IXamlTypeResolver 또는 x:Type과 같은 다른 서비스에 대한 형식을 확인하는 데 필요한 한정 정도에 영향을 미칠 수 있습니다.This can affect the degree of qualification that is needed to resolve types for other services, such as for IXamlTypeResolver or for x:Type. AmbientPropertyValue을 참조하세요.See also AmbientPropertyValue.

IXamlSchemaContextProviderIXamlSchemaContextProvider

참조 설명서: IXamlSchemaContextProviderReference documentation: IXamlSchemaContextProvider

정의 방법: System.Xaml 네임스페이스, System.Xaml 어셈블리Defined by: System.Xaml namespace, System.Xaml assembly

관련: 로드 경로 및 XAML 형식을 지원 형식으로 확인 해야 하는 모든 작업입니다.Relevant to: Load path, and any operation that must resolve a XAML type to a backing type.

서비스 API: SchemaContextService API: SchemaContext

지연된 콘텐츠를 통합하기 위해 지연된 영역에서 같은 스키마 컨텍스트가 작동해야 하므로 XAML 스키마 컨텍스트는 모든 지연 로드 작업에 필요합니다.XAML schema context is necessary for any defer load operations, because the same schema context must act on the deferred area in order to integrate the deferred content. XAML 스키마 컨텍스트 역할에 대한 자세한 내용은 XAML Services를 참조하세요.For more information about the role of the XAML schema context, see XAML Services.

IRootObjectProviderIRootObjectProvider

참조 설명서: IRootObjectProviderReference documentation: IRootObjectProvider

정의 방법: System.Xaml 네임스페이스, System.Xaml 어셈블리Defined by: System.Xaml namespace, System.Xaml assembly

관련: 로드 경로입니다.Relevant to: Load path.

서비스 API: RootObjectService API: RootObject

서비스는 특정 프레임워크를 통해 노출되거나 프레임워크에서 자주 사용되는 루트 요소 클래스의 기능을 통해 노출되는 애플리케이션 서비스와 관련됩니다.The service is relevant to application services that are exposed by a particular framework or by capabilities of a frequently used root element class in a framework. 루트 개체를 가져오기 위한 한 가지 시나리오는 코드 숨김 및 이벤트 배선을 연결하는 것입니다.One scenario for obtaining the root object is connecting code-behind and event wiring. 예를 들어 x:Class 의 WPF 구현은 XAML 태그의 다른 위치에 있는 모든 이벤트 처리기 특성의 태그 컴파일 및 배선에 사용됩니다.For example, the WPF implementation of x:Class is used for markup compile and wiring of any event handler attribute that is found at any other position in the XAML markup. 태그 연결 지점 및 태그 컴파일에 대한 코드 숨김 정의 부분 클래스는 루트 요소에 있습니다.The connection point of markup and code-behind defined partial classes for markup compile is at the root element.

IXamlNamespaceResolverIXamlNamespaceResolver

참조 설명서: IXamlNamespaceResolverReference documentation: IXamlNamespaceResolver

정의 방법: System.Xaml 네임스페이스, System.Xaml 어셈블리Defined by: System.Xaml namespace, System.Xaml assembly

관련: 로드 경로, 저장 경로입니다.Relevant to: Load path, save path.

서비스 API: GetNamespace , 저장 경로에 대한 GetNamespacePrefixes .Service API: GetNamespace for load path, GetNamespacePrefixes for save path.

IXamlNamespaceResolver 는 원래 XAML 태그에 매핑된 대로 접두사에 따라 XAML 네임스페이스 식별자/URI를 반환할 수 있는 서비스입니다.IXamlNamespaceResolver is a service that can return a XAML namespace identifier / URI based on its prefix as mapped in the originating XAML markup.

IProvideValueTargetIProvideValueTarget

참조 설명서: IProvideValueTargetReference documentation: IProvideValueTarget

정의 방법: System.Windows.Markup 네임스페이스, System.Xaml 어셈블리Defined by: System.Windows.Markup namespace, System.Xaml assembly

관련: 경로를 로드 하 고 경로를 저장 합니다.Relevant to: Load path and save path.

서비스 API: TargetObject, TargetProperty.Service APIs: TargetObject, TargetProperty.

IProvideValueTarget 을 사용하면 형식 변환기 또는 태그 확장이 로드 시 작동할 위치에 대한 컨텍스트를 가져올 수 있습니다.IProvideValueTarget enables a type converter or markup extension to obtain context about where it is acting at load time. 구현에서 이 컨텍스트를 사용하여 사용을 무효화할 수 있습니다.Implementations might use this context to invalidate a usage. 예를 들어 WPF에는 몇몇 태그 확장 내부에 DynamicResourceExtension과 같은 논리가 있습니다.For example, WPF has logic inside some of its markup extensions such as DynamicResourceExtension. 이 논리에서는 TargetProperty 를 확인하여 확장이 종속성 속성을 설정하거나 기타 비종속성 속성의 짧은 목록을 설정하는 데만 사용되는지 확인합니다.The logic checks the TargetProperty to make sure that the extension is only used to set dependency properties (or a short list of other non-dependency properties).

IXamlNameResolverIXamlNameResolver

참조 설명서: IXamlNameResolverReference documentation: IXamlNameResolver

정의 방법: System.Xaml 네임스페이스, System.Xaml 어셈블리Defined by: System.Xaml namespace, System.Xaml assembly

관련: x:Name ,x:Reference또는 프레임 워크 특정 기술로 식별 되는 개체를 확인 하는 경로 개체 그래프 정의를 로드 합니다.Relevant to: Load path object graph definition, resolving objects identified by x:Name, x:Reference, or framework-specific techniques.

서비스 API: Resolve, 전방 참조 처리와 같은 더 고급 시나리오를 위한 기타 API.Service APIs: Resolve; other APIs for more advanced scenarios such as dealing with forward references.

x:Reference 처리의 .NET Framework XAML 서비스 구현에는 이 서비스를 사용합니다.The .NET Framework XAML Services implementation of x:Reference handling relies on this service. 프레임워크를 지원하는 특정 프레임워크 또는 도구는 x:Name 처리나 동등한 항목(RuntimeNamePropertyAttribute 특성 사용) 속성 처리에 이 서비스를 사용합니다.Specific frameworks or tools that support the framework use this service for x:Name handling or equivalent (RuntimeNamePropertyAttribute attributed) property handling.

IDestinationTypeProviderIDestinationTypeProvider

참조 설명서: IDestinationTypeProviderReference documentation: IDestinationTypeProvider

정의 방법: System.Xaml 네임스페이스, System.Xaml 어셈블리Defined by: System.Xaml namespace, System.Xaml assembly

관련: 간접 CLR 형식 정보의 로드 경로 확인.Relevant to: Load path resolution of indirect CLR type information.

서비스 API: GetDestinationTypeService API: GetDestinationType

자세한 내용은 IDestinationTypeProvider을 참조하세요.For more information, see IDestinationTypeProvider.

참고자료See also