如何:获取从 DTE 对象的一个服务

服务可以从访问 Visual Studio 自动 DTEClass 对象的所有过程中获取的。 例如,通过 DTE 对象访问从向导的 SVsActivityLog 服务。 可以使用此服务到写入事件日志。 有关更多信息,请参见 如何:使用事件日志

DTE 对象实现 IServiceProvider,使用 GetService,可用于从托管代码中的服务查询。

获取从 DTE 对象的一个服务

  • 下面的代码创建从 DTE 对象的 ServiceProvider 并调用与 SVsActivityLog 服务类型的 GetService 。 服务被强制转换为接口 IVsActivityLog,用于编写项操作日志。 有关更多信息 abou 对事件日志的编写方式,请参见 如何:使用事件日志

    ' Start with the DTE object, for example:  
    'DTE dte = (DTE)GetService(typeof(DTE));  
    Dim dte As DTE
    dte = CType(GetService(GetType(DTE)), DTE)
    
    Dim sp As New ServiceProvider(dte)
    Dim log As IVsActivityLog = TryCast(GetService(GetType(SVsActivityLog)), IVsActivityLog)
    If log Is Nothing Then 
        Return 
    End If 
    
    Dim hr As Integer = log.LogEntry(CType(__ACTIVITYLOG_ENTRYTYPE.ALE_INFORMATION, UInt32), Me.ToString(), String.Format(CultureInfo.CurrentCulture, "Consuming SVsActivityLog service in {0}", Me.ToString()))
    
    // Start with the DTE object, for example: 
    // DTE dte = (DTE)GetService(typeof(DTE));
    
    ServiceProvider sp = new ServiceProvider(dte);
    IVsActivityLog log =
       GetService(typeof(SVsActivityLog)) as IVsActivityLog;
    if (log == null) return;
    
    int hr = log.LogEntry(
       (UInt32)__ACTIVITYLOG_ENTRYTYPE.ALE_INFORMATION,
       this.ToString(),
       string.Format(CultureInfo.CurrentCulture,
       "Consuming SVsActivityLog service in {0}", this.ToString())
    );
    

请参见

概念

服务 Essentials

其他资源

服务