Поймите Component.GetService()

У меня есть метод в Usercontrol с этим кодом

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

Я хочу переместить этот метод в класс "Proxy", который будет выступать в качестве посредника между Visual Studio и моим приложением. Проблема заключается в том, что GetService корректно возвращает активный документ, только если это вызов внутри элемента управления. Когда я перемещаю этот метод в класс Proxy, GetService не имеет определения. Я ищу, что этот метод происходит от ComponentModel.Component, поэтому я сделал Proxy-класс производным от Component. Все компилируется нормально, но всегда, когда я запрашиваю активный документ, возникает исключение. Мне кажется, что я плохо понимаю, как работает метод GetService(). Пожалуйста, помогите с этим.

1 ответ

Решение

Component.GetService вызывает IServiceProvider.GetService для экземпляра ISite, назначенного свойству Site компонента (при условии, что оно есть). Вам не нужно настраивать экземпляр прокси-сервера на наследование от Component, но вам необходимо предоставить ему доступ к ISite/IServiceProvider.

Другие вопросы по тегам