Поделиться через


фабрики редактора

Фабрика редактора создает объекты редактора и помещает их в границы окна, известную как физическое представление. Он создает объекты представления данных документа и документ, необходимые для создания редакторы и конструкторы. Необходимые для создания фабрики редактора редактор Visual Studio и любой основной стандартный редактор. Специализированный редактор также при необходимости можно создать с фабрикой редактора.

Создать фабрику редактора, реализовав IVsEditorFactory интерфейс. В следующем примере показано, как реализовать IVsEditorFactory создать фабрику редактора.

<Guid(GuidList.guidEditorFactory)> _
Public NotInheritable Class SingleViewEditorFactory
    Implements IVsEditorFactory
    Implements IDisposable

    Private MyPackage As PackageSingleViewEditor
    Private vsServiceProvider As ServiceProvider

    Public Sub New(ByVal packageEditor As PackageSingleViewEditor)
        Trace.WriteLine(String.Format(CultureInfo.CurrentCulture,
          "Entering {0} constructor", Me.ToString()))
        MyPackage = packageEditor
    End Sub

#Region "IVsEditorFactorySupport" 
    Public Function Close() As Integer Implements VisualStudio.Shell.Interop.IVsEditorFactory.Close
        Throw New NotImplementedException
    End Function 

    Public Function CreateEditorInstance(ByVal grfCreateDoc As UInteger, ByVal pszMkDocument As String, ByVal pszPhysicalView As String, ByVal pvHier As VisualStudio.Shell.Interop.IVsHierarchy, ByVal itemid As UInteger, ByVal punkDocDataExisting As System.IntPtr, ByRef ppunkDocView As System.IntPtr, ByRef ppunkDocData As System.IntPtr, ByRef pbstrEditorCaption As String, ByRef pguidCmdUI As System.Guid, ByRef pgrfCDW As Integer) As Integer Implements VisualStudio.Shell.Interop.IVsEditorFactory.CreateEditorInstance
        Throw New NotImplementedException
    End Function 

    Public Function MapLogicalView(ByRef rguidLogicalView As System.Guid, ByRef pbstrPhysicalView As String) As Integer Implements VisualStudio.Shell.Interop.IVsEditorFactory.MapLogicalView
        Throw New NotImplementedException
    End Function 

    Public Function SetSite(ByVal psp As VisualStudio.OLE.Interop.IServiceProvider) As Integer Implements VisualStudio.Shell.Interop.IVsEditorFactory.SetSite
        Throw New NotImplementedException
    End Function
#End Region

#Region "IDisposable Support" 
    Public Sub Dispose() Implements IDisposable.Dispose
        Throw New NotImplementedException
    End Sub
#End Region

End Class
[Guid(GuidList.guidEditorFactory)]
public sealed class SingleViewEditorFactory : IVsEditorFactory, IDisposable
{
    private PackageSingleViewEditor MyPackage;
    private ServiceProvider vsServiceProvider;

    public SingleViewEditorFactory(PackageSingleViewEditor packageEditor)
    {
        Trace.WriteLine(string.Format(CultureInfo.CurrentCulture, 
            "Entering {0} constructor", this.ToString()));
        MyPackage = packageEditor;
    }

    #region "IVsEditorFactory Support" 
        public int Close()
        {
            throw new NotImplementedException();
        }

        public int CreateEditorInstance(uint grfCreateDoc, string pszMkDocument, string pszPhysicalView, IVsHierarchy pvHier, uint itemid, IntPtr punkDocDataExisting, out IntPtr ppunkDocView, out IntPtr ppunkDocData, out string pbstrEditorCaption, out System.Guid pguidCmdUI, out int pgrfCDW)
        {
            throw new NotImplementedException();
        }

        public int MapLogicalView(ref System.Guid rguidLogicalView, out string pbstrPhysicalView)
        {
            throw new NotImplementedException();
        }

        public int SetSite(Microsoft.VisualStudio.OLE.Interop.IServiceProvider psp)
        {
            throw new NotImplementedException();
        }
    #endregion

    #region "IDisposable Support" 
        public void Dispose()
        {
            throw new NotImplementedException();
        }
    #endregion
}

Редактор загружается при первом открытии файла, тип обрабатывается этим редактором. Можно выбрать, чтобы открыть или конкретным редактор или редактор по умолчанию. Если выбрать редактор по умолчанию, интегрированная среда разработки (ide) определяет нужный редактор, чтобы открыть, а затем открыть его. Дополнительные сведения см. в разделе Определение подходящего редактор откроет файл в проекте.

Регистрация фабрики редактора

Прежде чем использовать редактор, который был создан, необходимо зарегистрировать сведения о нем, включая расширение файла, оно может обработать.

Если в VSPackage написаны в управляемом коде, можно использовать управляемый метод .NET Framework пакета (MPF) RegisterEditorFactory регистрация фабрики редактора, установленном после загрузки VSPackage. Если в VSPackage записывается в неуправляемом коде, необходимо зарегистрировать пользовательское производство с помощью редактора SVsRegisterEditors служба.

Регистрация фабрики редактора с помощью управляемого кода

Необходимо зарегистрировать в фабрику редактора в VSPackage Initialize метод. Первый вызов base.Initialize, а затем вызовите RegisterEditorFactory для каждого фабрики редактора

В управляемом коде никакого регистрацию необходимости фабрика редактора, поскольку VSPackage обрабатывающий это автоматически. Кроме того, если фабрику редактора реализует IDisposableавтоматически удален при его регистрации.

Регистрация фабрики редактора с помощью неуправляемого кода

в SetSite реализация для пакета редактора, использующий QueryService метод, вызываемый SVsRegisterEditors. Это возвращает указатель на IVsRegisterEditors. Вызовите RegisterEditor метод, передавая пользовательскую реализацию IVsEditorFactory интерфейс. Вы mplement IVsEditorFactory в отдельном классе.

Процесс регистрации фабрики редактора

Следующий процесс происходит, когда Visual Studio загружает редактор с помощью работы фабрика редактора.

  1. OpenStandardEditorсистема проекта вызывает Visual Studio .

  2. Этот метод возвращает фабрику редактора. Visual Studio задерживает загрузку пакета редактора, однако до системы проектов в действительности не будут требуется редактор.

  3. При необходимости вызывает редактор системе проектов Visual Studio CreateEditorInstance, специализированный метод, возвращающий оба представления документа и объекты данных документа.

  4. Если вызовы Visual Studio в рабочей среде с помощью редактора CreateEditorInstance возврат и объект данных документа и объект представления документа Visual Studio, а затем создает окно документа, устанавливает объект представления документа в нем, и делает запись в выполняющуюся document table (RDT) для объекта данных документа.

См. также

Ссылки

IVsEditorFactory

Основные понятия

таблица запущенных документов