IVsDataProvider.TryCreateObject<TSite> 方法 (Guid, Type, TSite)

尝试创建指定的DDEX的实例支持由DDEX提供程序实现的指定DDEX数据源的实体,站点具有指定的站点对象。

命名空间:  Microsoft.VisualStudio.Data.Core
程序集:  Microsoft.VisualStudio.Data.Core(在 Microsoft.VisualStudio.Data.Core.dll 中)

语法

声明
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 不支持泛型类型或方法。

类型参数

  • TSite
    站点。

参数

  • source
    类型:System.Guid
    一个DDEX数据源标识符或 Empty 没有特定的数据源的。
  • objType
    类型:System.Type
    DDEX的类型支持实体。
  • site
    类型:TSite
    应放置对象的实例新DDEX支持实体。

返回值

类型:System.Object
指定的DDEX的实例支持由DDEX提供程序实现,站点具有指定的站点对象的实体,则为; DDEX提供程序支持它;否则,nullnull 引用(在 Visual Basic 中为 Nothing)。

异常

异常 条件
ArgumentNullException

objType 参数为 nullnull 引用(在 Visual Basic 中为 Nothing)。

[DataProviderException]

支持实体的新实例的实例引发了异常,还是 CreateInstance 的方式调用通过反射或通过DDEX提供程序的 CreateObjectCreateObject 方法失败的默认值或客户端对象的实现的实现或创建(如果有)。

备注

此方法执行各种步骤会指定的DDEX的实例支持实体类型。

注册表测试

该方法首先检查注册表启动有关此操作的信息支持实体。找到在提供程序的SupportedObjects键下为与支持实体类型的注册表项。如果非空DDEX数据源传递到方法,它还查找此DDEX数据源的子级。如果找到任何项,它检索键的默认值。如果键的值不nullnull 引用(在 Visual Basic 中为 Nothing) 和非null,则它假定该值为选件类的类型实现支持实体的名称。它从基本值开头然后检索限定信息,和,因此,如果这是 nullnull 引用(在 Visual Basic 中为 Nothing),程序集值。CodeBase值是包含该注册类型的程序集的完全限定路径。程序集值是可在公共语言运行时(CLR)之前设置和加载程序集的完全限定名。

如果支持实体从基 IVsDataSupport 接口继承,唯一用途是返回XML流,方法查找可以描述XML文件位置可以传递给特定基实现支持实体的其他值。一个示例是在标准DDEX framework程序集中定义的 DataObjectSupport 选件类。方法首先定位可能存在也可能不是XML文件的完全限定名在磁盘上一个XmlFile值。如果此值存在,方法查找能包含一个非限定XmlFile值的路径对XmlPath值。当您在同一路径位置时,将XML文件的本地化版本的路径和文件名的分离很重要。如果XmlFile值不存在,方法查找标识资源的名称程序集中包含XML的一个XmlResource值。它从XmlCodeBase值开头然后再查找限定信息,和,因此,如果这是 nullnull 引用(在 Visual Basic 中为 Nothing),XmlAssembly值。XmlCodeBase值是包含指定的资源程序集的完全限定路径。XmlAssembly值是可以由CLR设置和加载程序集的完全限定名。

如果此时确保没有在创建该的注册表中的信息不足DDEX的实例支持实体,注册表测试步骤跳过。在这种情况下,因此,如果它由DDEX提供程序,实现方法回退到 IVsDataSourceSpecializerIVsDataProviderObjectFactory 接口的显式实现。否则,此方法通过基本代码或全名将相应的程序集(按照这个顺序)并从程序集中获取该类型。如果此过程未找到一个适当的类型,DataProviderException 将引发。

最后,类型创建一个实例。如果支持实体从基 IVsDataSupport 接口继承,并报告XML文件位置的附加信息提供程序注册,此信息时传递作为参数传递给该类型构造函数。此信息将作为XML文件名和路径(两个字符串),或是XML资源名称和解析的 Assembly 对象(字符串和 Assembly 对象)。在后一种情况下,因此,如果无法加载程序,DataProviderException 将引发。如果其他错误,将类型创建实例时,或已创建的类型不实现所需的支持实体类型,DataProviderException 将引发。

调用源Specializer或对象提供程序工厂

当注册表测试未找到足够的信息来创建支持实体的实例时,DDEX提供程序的源specializer (如果存在)或对象工厂(对于一个基于包的提供程序) CreateObject 方法调用。当非空DDEX数据源传递给此方法时,提供程序的源specializer (如果存在)先调用。如果此方法引发 NotImplementedException 或不返回新实例,则调用时引发的提供程序的对象工厂,因此,如果有一个,还忽略所有 NotImplementedException。对于其他异常,DataProviderException 将引发。

创建默认实例

如果对象是未由此创建的点,这意味着DDEX提供程序不实现支持实体。但是,因此,如果支持实体定义一个默认对象实现,默认对象实例将创建。

说明说明

在Visual Studio中DDEX 2005中不支持默认对象实现,因此,默认对象不会创建。

对象网站

DDEX所有新创建的实例支持使用此方法可以被放置与三种标准站点对象的实体。这些对象如下所示:全局服务提供程序对象、创建它的 IVsDataProvider 对象和表示特定DDEX数据源的 IVsDataSource 对象都会创建用于,因此,如果提供了一个非空DDEX数据源。实例分别站点,仅当新创建的实例实现泛型类型 IServiceProvider、 IVsDataProvider,和/或 IVsDataSource时的 IVsDataSiteableObject<T> 接口。

在这些标准站点对象后,因此,如果自定义站点对象由调用方传递,新实例将网站具有自定义对象,则实现 IVsDataSiteableObject<T> 接口。

客户端对象创建

在创建DDEX的最后一步支持实体涉及导致客户端包装实体对象是否定义了一个。这是通过首先检查支持实体类型完成 DataClientObjectAttribute实例。如果此实例存在,关联的选件类ID标识的对象创建一个实例,并且新的提供程序对象传递给此客户端对象。在客户端创建对象后,这些站点与同一组标准和自定义站点对象提供基础提供程序对象。

示例

下面的代码演示如何调用此方法创建标准支持实体。

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>();
    }
}

.NET Framework 安全性

请参见

参考

IVsDataProvider 接口

TryCreateObject 重载

Microsoft.VisualStudio.Data.Core 命名空间