Понимать Component.GetService () - PullRequest
       33

Понимать Component.GetService ()

0 голосов
/ 14 января 2011

У меня есть метод в 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 Ответ

1 голос
/ 14 января 2011

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

...