Editor-Factorys
Eine Editor factory Editor Objekte erstellt und setzt sie in einen Fensterrahmen, wird als eine physikalische Ansicht. Erstellen Sie die Dokumentdaten der Dokumente und die Objekte, die erforderlich sind, um Editoren und Designer erstellen. Eine Editor factory ist erforderlich, um den Visual Studio-Kern Editor und jeden Standardwert des Editors zu erstellen. Ein benutzerdefinierter Editor kann auch mit einem Editor factory optional erstellt werden.
Sie erstellen eine Editor factory, indem Sie die IVsEditorFactory-Schnittstelle implementieren. Im folgenden Beispiel wird veranschaulicht, wie IVsEditorFactory implementiert, um eine Editor factory zu erstellen:
<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
}
Ein Editor wird das erste Mal geladen, dem Sie einen Dateityp öffnen, die von diesem Editor behandelt wird. Sie können entweder einen bestimmten Editor oder den Standard-Editor geöffnet werden soll. Wenn Sie den Standard-Editor auswählen, bestimmt die integrierte Entwicklungsumgebung (Integrated Development Environment, IDE) die richtige Editor zu öffnenden und öffnet sie. Weitere Informationen finden Sie unter Bestimmen, welche Editor eine Datei in einem Projekt geöffnet wird.
Registrieren Editor-Factorys
Bevor Sie einen Editor verwenden können, den Sie erstellt haben, müssen Sie Informationen über diese zunächst, einschließlich der Dateierweiterungen registrieren, die sie behandeln kann.
Wenn ein VSPackage in verwaltetem Code geschrieben wird, können Sie die Methode RegisterEditorFactory verwenden (MPF) des verwalteten Paketframeworks der Editor factory zu registrieren, nachdem VSPackages geladen wurde. Wenn ein VSPackage in nicht verwaltetem Code geschrieben wird, müssen Sie den Editor factory registrieren, indem Sie den SVsRegisterEditors Dienst verwenden.
Eine Editor-Factory mithilfe von verwaltetem Code registrieren
Sie müssen den Editor factory VSPackages in der Initialize-Methode registriert werden. Erster Aufruf base.Initialize, und rufen Sie dann RegisterEditorFactory für jede Editor an factory
In verwaltetem Code besteht keine Notwendigkeit, eine Editor factory Registrierung aufgehoben, da ein VSPackage dies für Sie verarbeitet. Auch wenn der Editor factory IDisposableimplementiert, wird es automatisch freigegeben, wenn sich deren Registrierung aufgehoben werden soll.
Eine Editor factory mithilfe von nicht verwaltetem Code registrieren
In der Implementierung für das Paket SetSite Editor, verwenden Sie die QueryService-Methode, um SVsRegisterEditorsaufzurufen. Das zu, gibt einen Zeiger auf IVsRegisterEditorszurück. Rufen Sie die RegisterEditor-Methode an, indem Sie die Implementierung der IVsEditorFactory-Schnittstelle übergeben. Sie müssen mplement IVsEditorFactory in einer separaten Klasse.
Der Editor-Factory-Anmeldeprozess
Der folgende Prozess tritt auf, wenn Visual Studio den Editor mithilfe der Editor factorys wird:
Das Projektsystem ruft Visual StudioOpenStandardEditoran.
Diese Methode gibt den Editor factory zurück. Visual Studio verzögert, das Paket des Editors zu laden, jedoch, bis ein Projektsystem erforderlich sind tatsächlich den Editor.
Wenn ein Projektsystem den Editor erfordert, ruft Visual Studio CreateEditorInstance, eine spezielle Methode auf, wenn sie beide Dokumente und die Ansicht das Dokument datenobjekte zurückgibt.
Wenn Aufrufe von Visual Studio factory Editor mithilfe des CreateEditorInstance ein Dokument das angegebene Channeldatenobjekt und die Dokumente ein Objekt zurückgeben, erstellt Visual Studio dann das Dokumentfenster, das Dokument platziert dort die Objekt und wandelt einen Eintrag in die Dokumente (Drehtransformator) für das Dokument das angegebene Channeldatenobjekt.