Domanda

Ho un metodo in un UserControl con questo codice

        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;
        }
    }

Voglio spostare questo metodo per un "proxy" di classe che sta andando ad agire come intermediario tra Visual Studio e la mia domanda. Il problema è che GetService ritorno solo il documento attivo correttamente se è chiamata all'interno del controllo. Quando mi muovo che metodo alla classe Proxy, GetService non ha definizione. Cerco che questo metodo viene da ComponentModel.Component, così ho fatto la classe derivano Proxy da Component. Tutto compila OK ma sempre quando chiedo per il documento attivo si verifica un'eccezione. cosa che che non sto capire bene come funziona il metodo GetService (). Si prega di aiutare con questo.

È stato utile?

Soluzione

Component.GetService invoca IServiceProvider.GetService nell'istanza ISite assegnato alla proprietà del sito del componente (ammesso che ve ne sia uno). Non dovrebbe essere necessario per rendere il vostro ereditare esempio delega da Component, ma avrete bisogno di dare accesso al ISite / IServiceProvider.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top