Comprender Component.GetService ()
-
11-10-2019 - |
Pregunta
i tiene un método en un control de usuario con este código
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;
}
}
Quiero mover este método a una clase "proxy" que se va a actuar como intermediario entre Visual Studio y mi solicitud. El problema es que sólo se GetService devolver el documento activo correctamente si está dentro de la llamada de control. Cuando muevo ese método a la clase Proxy, GetService no tiene definición. Busco que este método proviene de ComponentModel.Component, así que hice la deriva clase Proxy de Component. Todo se compila bien, pero siempre cuando pido el documento activo se produce una excepción. cosa que las que no estoy entendiendo bien cómo funciona el método GetService (). Por favor, ayuda con esto.
Solución
Component.GetService invoca IServiceProvider.GetService en la instancia ISite asignado a la propiedad del sitio del componente (suponiendo que hay uno). No debería ser necesario para hacer su hereda la instancia del proxy de Component, pero se necesita para darle acceso a ISite / IServiceProvider.