Compartir a través de


El código heredado que adapta el editor New

El editor de Visual Studio 2010 proporciona muchas características a los que puede tener acceso a los componentes de código existentes. Las instrucciones siguientes muestran cómo adaptar no-MEF un componente, por ejemplo, un VSPackage, para utilizar la funcionalidad del editor. Las instrucciones también muestra cómo usar los adaptadores para obtener servicios del editor en código administrado y no administrado.

Adaptadores de editor

Los adaptadores del editor, o las cuñas, son contenedores para los objetos de editor que también exponen las clases e interfaces de Microsoft.VisualStudio.TextManager.Interop API. Puede utilizar los adaptadores para desplazarse por los servicios de no-editor por ejemplo, los comandos del shell de Visual Studio, y los servicios del editor. (Este es cómo el editor se hospeda actualmente en Visual Studio). Adaptadores antiguos editor también habilitado y extensiones de servicio de funcionen correctamente en Visual Studio 2010.

Usando adaptadores del editor

IVsEditorAdaptersFactoryService proporciona métodos que intercambian entre las nuevas interfaces de editor y las interfaces heredadas, y también los métodos que crean los adaptadores.

Si usa este servicio en una parte MEF, puede importar el servicio como sigue.

[Import(typeof(IVsEditorAdaptersFactoryService))]
internal IVsEditorAdaptersFactoryService editorFactory;

Si desea utilizar este servicio en un componente no-MEF, siga las instrucciones del “editor Services de Utilizar Visual Studio en una sección componente No-MEF más adelante en este tema.

Cambiar Entre el editor API y heredado API New

Utilice los métodos siguientes para cambiar entre un objeto de editor y una interfaz heredada.

Método

Conversión

GetBufferAdapter

Convierte una interfaz ITextBuffer en IVsTextBuffer.

GetDataBuffer

Convierte una interfaz IVsTextBuffer en ITextBuffer.

GetDocumentBuffer

Convierte una interfaz IVsTextBuffer en ITextBuffer.

GetViewAdapter

Convierte una interfaz ITextView en IVsTextView.

GetWpfTextView

Convierte una interfaz IVsTextView en IWpfTextView.

Crear adaptadores

Utilice los métodos siguientes para crear adaptadores para las interfaces heredadas.

Método

Conversión

CreateVsCodeWindowAdapter

Crea una interfaz IVsCodeWindow.

CreateVsTextBufferAdapter

crea IVsTextBuffer para IContentTypeespecificado.

CreateVsTextBufferAdapter

Crea una interfaz IVsTextBuffer.

CreateVsTextBufferCoordinatorAdapter

Crea una interfaz IVsTextBufferCoordinator.

CreateVsTextViewAdapter

Crea un objeto IVsTextView para ITextViewRoleSet.

CreateVsTextViewAdapter

Crea una interfaz IVsTextView.

Crear adaptadores en código no administrado

Todas las clases de adaptadores se registran para ser el valor local co-creatable, y se pueden crear instancias mediante la función de VsLocalCreateInstance() .

Todos los adaptadores se crean utilizando el GUID que se definen en el archivo de vsshlids.h en. instalación \VisualStudioIntegration\Common\Inc\ folder of the Visual Studio SDK. para crear una instancia de VsTextBufferAdapter, utilice el código siguiente.

IVsTextBuffer *pBuf = NULL;
VsLocalCreateInstance(CLSID_VsTextBuffer, NULL, CLSCTX_INPROC_SERVER, IID_IVsTextBuffer, (void**)&pBuf);

Crear adaptadores en código administrado

En código administrado, puede co-crear adaptadores igual que el descrito para código no administrado. También puede utilizar un servicio MEF que permiten crear e interactuar con los adaptadores. Esta manera de obtener un adaptador habilita un control más específico que tiene al co-lo crea.

Para crear un adaptador de IVsTextView

  1. agregue una referencia a Microsoft.VisualStudio.Editor.dll. Asegúrese de que CopyLocal está establecido en false.

  2. cree instancias IVsEditorAdaptersFactoryService, como sigue.

    using Microsoft.VisualStudio.Editor;
    ...
    IVsEditorAdaptersFactoryService adapterFactoryService = ComponentModel.GetService<IVsEditorAdaptersFactoryService>();
    
  3. Llame al método CreateX().

    adapterFactoryService.CreateTextViewAdapter(textView);
    

Mediante el editor Directamente de Visual Studio de código no administrado

El espacio de nombres Microsoft.VisualStudio.Platform.VSEditor y el espacio de nombres Microsoft.VisualStudio.Platform.VSEditor.Interop exponen interfaces COM-accesibles como interfaces de IVx*. por ejemplo, la interfaz de Microsoft.VisualStudio.Platform.VSEditor.Interop.IVxTextBuffer es la versión COM de la interfaz de ITextBuffer . De IVxTextBuffer, puede obtener acceso a las instantáneas del búfer, modificar el búfer, escuchar eventos de texto-cambio en el búfer, y crear puntos y los intervalos de seguimiento. los pasos siguientes muestran cómo tener acceso a IVxTextBuffer de IVsTextBuffer.

Para obtener un objeto IVxTextBuffer

  1. Las definiciones de las interfaces de IVx* están en el archivo de VSEditor.h en. instalación \VisualStudioIntegration\Common\Inc\ folder of the Visual Studio SDK.

  2. El código siguiente crea instancias de un búfer de texto utilizando el método de IVsUserData->GetData() . En el código siguiente, pData es un puntero a un objeto de IVsUserData .

    #include <textmgr.h>
    #include <VSEditor.h>
    #include <vsshlids.h>
    
    CComPtr<IVsTextBuffer> pVsTextBuffer;
    CComPtr<IVsUserData> pData;
    CComPtr<IVxTextBuffer> pVxBuffer;
    ...
    if (SUCCEEDED(pVsTextBuffer->QueryInterface(IID_IVsUserData, &pData))
    {
        CComVariant vt;
        if (SUCCEEDED(pData->GetData(GUID_VxTextBuffer, &vt)) &&
        (vt.Type == VT_UNKNOWN) && (vt.punkVal != NULL))
        {
            vt.punkVal->QueryInterface(IID_IVxTextBuffer, (void**)&pVxBuffer);
        }
    }
    

Mediante el editor Services de Visual Studio en un componente No-MEF

Si tiene un componente existente de código administrado que no utilice MEF y desea utilizar los servicios del editor de Visual Studio, debe agregar una referencia al ensamblado que contiene el ComponentModelHost VSPackage y obtiene el servicio de SComponentModel.

Para utilizar los componentes del editor de Visual Studio de un componente no-MEF

  1. Agregue una referencia al ensamblado de Microsoft.VisualStudio.ComponentModelHost.dll en. instalación \Common7\IDE\ folder of the Visual Studio. Asegúrese de que CopyLocal está establecido en false.

  2. Agregue un miembro privado de IComponentModel a la clase en la que desea utilizar servicios del editor de Visual Studio, como sigue.

    using Microsoft.VisualStudio.ComponentModelHost;
    ....
    private IComponentModel componentModel;
    
  3. Cree instancias el modelo componente en el método de inicialización para el componente.

    componentModel =
     (IComponentModel)Package.GetGlobalService(typeof(SComponentModel));
    
  4. Después de esto, puede obtener de los servicios del editor de Visual Studio llamando al método de IComponentModel.GetService<T>() para el servicio que desea.

    textBufferFactoryService =
         componentModel.GetService<ITextBufferFactoryService>();