Ich habe eine Methode in einem Usercontrol mit diesem Codeverstehen Component.GetService()
public bool GetActiveDocument(ref EnvDTE.Document doc)
{
try
{
var dte = (DTE2)GetService(typeof(SDTE));
doc = dte.ActiveDocument;
if (doc == null)
{
MessageBox.Show("There isn't any file open in the Code Editor");
return false;
}
else return true;
}
catch (Exception)
{
MessageBox.Show("There was a problem getting the actual file, verify if it is open");
return false;
}
}
ich diese Methode auf einen „Proxy“ Klasse verschieben möchten, der als Vermittler zwischen Visual Studio handeln wird und meine Bewerbung. Das Problem besteht darin, dass GetService das aktive Dokument nur dann korrekt zurückgibt, wenn es sich um einen Aufruf im Steuerelement handelt. Wenn ich diese Methode in die Proxy-Klasse verschiebe, hat GetService keine Definition. Ich suche, dass diese Methode von ComponentModel.Component kommt, also ließ ich die Proxy-Klasse von Component ableiten. Alles kompiliert OK, aber immer wenn ich nach dem aktiven Dokument frage, tritt eine Ausnahme auf. Ich merke, dass ich nicht gut verstehe, wie die GetService() Methode funktioniert. Bitte helfen Sie mit.
Danke, das funktioniert. Ich verstehe es immer noch nicht gut, aber den GetService mit einer Referenz der ISite aufzurufen ist alles was ich brauche. Meine Zweifel ist warum, wenn ich den Cursor über die ursprüngliche GetService-Methode den Intellisense sagt mir, dass ist Component.GetService, was ich eigentlich anrufen und nicht IServiceProvider.GetService? – mjsr
Die Implementierung von Component.GetService ruft die GetService-Methode der Site-Eigenschaft auf. Intellisense zeigt Dokumentation, nicht Implementierung. Wenn Sie sich für die Details der Component.GetService-Implementierung interessieren, sollten Sie sich eine Kopie von Reflector (http://www.red-gate.com/products/dotnet-development/reflector/) besorgen. –
ich folge deinem Rat über .net Reflektor. Ich schaue dann die Implementierung des GetService und ist genau wie Sie sagen, es ist das Objekt, das ISite die endgültige Verantwortung für den Aufruf der GetService() -Methode implementieren. Was für ein eindrucksvolles Werkzeug, wie sie den Code wiederherstellen, ist beeindruckend. Ich habe immer noch das Gefühl, dass ich kein richtiges Verständnis des Komponentenmodells habe, aber das hilft wirklich auf dem Weg der Erleuchtung, :). Ich werde weiter nach dem Thema suchen. – mjsr