Como obter o ActiveDocument atual na extensão do Visual Studio usando o MEF?
Estou trabalhando na extensão do Visual Studio 2013 usando o MEF ao tentar ler o código e o tipo de conteúdo do documento ativo. Atualmente, ele apenas lê no Horário de abertura do documento / item de projeto no editor. Depois que elas são abertas, elas não são lidas novamente sempre que alternamos entre as guias de documentos abertas.
Requerimento: Quero que esta extensão leia o Tipo de Conteúdo e o Texto do Código do Documento Ativo atual.
Atualizada:
Problema: Eu sei, usando EnvDTE80.DTE2.ActiveWindow, posso obter um documento focado no momento, mas estou confuso aqui que como chamar esse código para ler as coisas atualmente ativas do documento / janela? Digamos que, se tivermos 10 documentos, o documento ativo (com foco atual) precisa ser lido por esta extensão. E aqui o VsTextViewCreated é chamado apenas quando abrimos um novo documento ou o documento fechado antes, ou seja, a exibição de texto é criada. Ele não será chamado para documentos já abertos (ou seja, a Visualização de texto já criada) e, portanto, não conseguiremos atualizar o objeto wpfTextView atualizado ao mover o foco para outros documentos já abertos. E estou confuso aqui como chamar isso usando DTE2.ActiveDocument ou DTE2.ActiveWindow manipuladores de eventos.
Pergunta, questão:
Isso é possível no MEF, sem usar o DTE?
Existe alguma interface que lide com TextViews já presente no editor VS?
Aqui está o meu código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.VisualStudio.Text.Tagging;
using Microsoft.VisualStudio.Text.Editor;
using System.ComponentModel.Composition;
using Microsoft.VisualStudio.Utilities;
using Microsoft.VisualStudio.Editor;
using Microsoft.VisualStudio.TextManager.Interop;
using Microsoft.VisualStudio.OLE.Interop;
using System.Diagnostics;
namespace VSIXProject_Test
{
[Export(typeof(IVsTextViewCreationListener))]
[ContentType("code")]
[TextViewRole(PredefinedTextViewRoles.Editable)]
class VsTe,xtViewCreationListener : IVsTextViewCreationListener
{
[Import]
IVsEditorAdaptersFactoryService AdaptersFactory = null;
public void VsTextViewCreated(IVsTextView textViewAdapter)
{
var wpfTextView = AdaptersFactory.GetWpfTextView(textViewAdapter);
if (wpfTextView == null)
{
Debug.Fail("Unable to get IWpfTextView from text view adapter");
return;
}
Debug.Write(wpfTextView.TextBuffer.ContentType.TypeName);
}
}
}