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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top