Share via


IVsDataProvider.TryCreateObject<TSite>, méthode (Guid, Type, TSite)

Essaie de créer une instance de l'entité spécifiée en charge de DDEX pour la source de données spécifiée de DDEX implémentée par le fournisseur de DDEX, située à l'objet spécifié de site.

Espace de noms :  Microsoft.VisualStudio.Data.Core
Assembly :  Microsoft.VisualStudio.Data.Core (dans Microsoft.VisualStudio.Data.Core.dll)

Syntaxe

'Déclaration
Function TryCreateObject(Of TSite) ( _
    source As Guid, _
    objType As Type, _
    site As TSite _
) As Object
Object TryCreateObject<TSite>(
    Guid source,
    Type objType,
    TSite site
)
generic<typename TSite>
Object^ TryCreateObject(
    Guid source, 
    Type^ objType, 
    TSite site
)
abstract TryCreateObject : 
        source:Guid * 
        objType:Type * 
        site:'TSite -> Object 
JScript ne prend pas en charge les types ou les méthodes génériques.

Paramètres de type

  • TSite
    Site.

Paramètres

  • source
    Type : System.Guid
    Un identificateur de source de données de DDEX, ou Empty pour une source de données spécifique.
  • objType
    Type : System.Type
    Un type d'entité de prise en charge DDEX.
  • site
    Type : TSite
    Une instance d'un objet qui doit localiser la nouvelle entité de prise en charge DDEX.

Valeur de retour

Type : System.Object
Une instance de l'entité spécifiée en charge de DDEX implémentée par le fournisseur de DDEX, situé à l'objet spécifié de site, si le fournisseur de DDEX le prend en charge ; sinon, nullune référence null (Nothing en Visual Basic).

Exceptions

Exception Condition
ArgumentNullException

Le paramètre objType est nullune référence null (Nothing en Visual Basic).

[DataProviderException]

L'instanciation d'une nouvelle instance de l'entité de prise en charge est levé une exception, par la façon d'un appel d' CreateInstance par réflexion ou par le biais de l'implémentation de méthode d' CreateObject ou d' CreateObject du fournisseur de DDEX, ou la création de la valeur par défaut ou de l'implémentation cliente d'objet (s'il y en a une.)

Notes

Cette méthode exécute différentes étapes pour produire une instance du type d'entité spécifié de prise en charge DDEX.

Inspection de Registre

La méthode commence par vérifier le Registre pour rechercher les informations sur cette entité de charge.Elle examine sous la clé de SupportedObjects du fournisseur d'une clé de Registre qui correspond au type d'entité de charge.Si une source de données non vide de DDEX a été passée dans la méthode, il recherche également une sous-clé pour cette source de données de DDEX.Si l'un ou l'autre de clé est trouvée, elle extrait la valeur par défaut de la clé.Si la valeur de la clé estnullune référence null (Nothing en Visual Basic) et non vide non, elle suppose que la valeur soit le nom d'une classe qui implémente l'entité de charge.Il extrait ensuite qualifier des informations, en commençant par une valeur de code base, et, si tel est nullune référence null (Nothing en Visual Basic), une valeur d'assembly.La valeur de base de code est le chemin qualifié complet d'un assembly qui contient le type enregistré.La valeur de l'assembly est le nom qualifié complet d'un assembly qui peut être défini et chargés par le common langage runtime (CLR).

Si l'entité de support hérite de l'interface de base d' IVsDataSupport , dont l'objectif est de retourner un flux XML, la méthode recherche des valeurs supplémentaires qui peuvent décrire l'emplacement d'un fichier XML qui peut être passé à une implémentation de base de l'entité spécifique de charge.Un exemple est la classe d' DataObjectSupport définie dans l'assembly standard d'infrastructure de DDEX.La méthode recherche d'abord une valeur de XmlFile qui peut ou ne peut pas être le nom qualifié complet d'un fichier XML sur le disque.Si cette valeur existe, la méthode recherche une valeur de XmlPath qui peut contenir le chemin d'accès d'une valeur non qualifiée de XmlFile.La séparation du chemin d'accès et le nom de fichier est importante lorsque vous placez des versions localisées d'un fichier XML au même emplacement de chemin d'accès.Si aucune valeur de XmlFile n'existe, la méthode recherche une valeur de XmlResource qui identifie le nom d'une ressource qui contient le XML dans un assembly.Il recherche ensuite ensuite qualifier des informations, en commençant par une valeur de XmlCodeBase, et, si tel est nullune référence null (Nothing en Visual Basic), une valeur de XmlAssembly.La valeur de XmlCodeBase est le chemin qualifié complet d'un assembly qui contient la ressource spécifiée.La valeur de XmlAssembly est le nom qualifié complet d'un assembly qui peut être défini et chargés par le CLR.

Si à ce stade on détermine qu'il n'y a pas assez d'informations du Registre pour créer une instance de l'entité de prise en charge DDEX, l'étape d'inspection de Registre est ignorée.Dans ce cas, la méthode revient à une implémentation explicite de l'interface d' IVsDataSourceSpecializer ou d' IVsDataProviderObjectFactory , si elle est implémentée par le fournisseur de DDEX.Sinon, la méthode charge l'assembly approprié via code base ou le nom complet (dans cet ordre) et obtient le type de l'assembly.Si ce processus ne trouve pas de type approprié, DataProviderException est levée.

Enfin, une instance du type est créée.Si l'entité de support hérite de l'interface de base d' IVsDataSupport et des informations supplémentaires sur un emplacement de fichier XML ont été enregistrées par le fournisseur, ces informations sont passées comme arguments au constructeur de type.Ces informations sont passées en tant que nom de fichier XML et chemin (deux chaînes), ou comme nom de ressources XML et résolu objet d' Assembly (une chaîne et d'un objet d' Assembly ).Dans ce dernier cas, DataProviderException est levée si l'assembly ne peut pas être chargé.Si une autre erreur se produit lorsque le type instance est créé, ou le type créé n'implémente pas le type d'entité attendu de charge, DataProviderException est levée.

Source Specializer d'appel ou fabrique d'objet fournisseur

Lorsque l'inspection de Registre ne recherche pas suffisamment d'informations pour créer une instance de l'entité de charge, le specializer de la source du fournisseur de DDEX (le cas échéant) ou la méthode d' CreateObject de fabrique d'objet (pour un fournisseur module basé) est appelé.Lorsqu'une source de données non vide de DDEX est passée à cette méthode, le specializer de la source du fournisseur (le cas échéant) est appelé en premier.Si cette méthode lève NotImplementedException ou ne retourne aucune instance, elle appelle la fabrique d'objet du fournisseur, s'il y en a une, également en ignorant tout NotImplementedException levée.Pour toutes les autres exceptions, DataProviderException est levée.

Créez l'instance par défaut

Si aucun objet n'a été créé par ce point, cela signifie que le fournisseur de DDEX n'implémente pas l'entité de charge.Toutefois, si l'entité de support définit une implémentation par défaut de l'objet, une instance de l'objet par défaut est créée.

[!REMARQUE]

DDEX dans Visual Studio 2005 ne prend pas en charge l'implémentation par défaut de l'objet, aucun objet par défaut ne sera créé.

Emplacement d'objet

Toutes les instances de création récente de DDEX prennent en charge les entités qui utilisent cette méthode peuvent se trouver à trois objets standard de site.Ces objets sont les suivantes : un objet global du fournisseur de services, l'objet d' IVsDataProvider qui l'a créé, et l'objet d' IVsDataSource qui représente la source de données du détail DDEX qu'elle a été créée pour, si une source de données non vide de DDEX a été fournie.Les instances sont situées uniquement lorsque l'instance de création récente implémente l'interface d' IVsDataSiteableObject<T> avec les types de IServiceProvidergénérique, IVsDataProvider, et/ou IVsDataSource, respectivement.

En suivant ces objets standard de site, si un objet personnalisé de site est passé par l'appelant, la nouvelle instance est située à l'objet personnalisé lorsqu'elle implémente l'interface d' IVsDataSiteableObject<T> .

Création d'objet client

La dernière étape pour créer une entité de prise en charge DDEX implique produire un objet client de wrapper si l'entité est définie avec une.Cela est fait en examinant d'abord le type d'entité de prise en charge pour une instance d' DataClientObjectAttribute.Si cette instance existe, une instance de l'objet identifié par l'ID de classe associé est créée et le nouvel objet fournisseur est passé à cet objet client.Une fois les objets clients créés, ils sont installés avec le même jeu de standard et le site personnalisé objets que l'objet fournisseur sous-jacent a été proposées.

Exemples

Le code suivant montre comment appeler cette méthode pour créer une des entités standard de charge.

using System;
using Microsoft.VisualStudio.Data.Core;
using Microsoft.VisualStudio.Data.Services.SupportEntities;

public class DDEX_IVsDataProviderExample10
{
    public static IVsDataConnectionProperties CreateConnectionProperties(
        IVsDataProvider provider)
    {
        return provider.TryCreateObject<IVsDataConnectionProperties>();
    }
}

Sécurité .NET Framework

Voir aussi

Référence

IVsDataProvider Interface

TryCreateObject, surcharge

Microsoft.VisualStudio.Data.Core, espace de noms