Вопрос

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

Я хочу перенести этот метод в класс «прокси», который будет действовать в качестве посредника между Visual Studio и моим приложением. Проблема в том, что Getservice правильно возвращает активный документ, только если он вызывает внутри элемента управления. Когда я перемещаю этот метод в класс прокси, у Getservice нет определения. Я ищу, что этот метод поступает из ComponentModel.component, поэтому я сделал класс прокси получен из компонента. Все собирает нормально, но всегда, когда я прошу активного документа, происходит исключение. Я то, что я плохо понимаю, как работает метод getservice (). Пожалуйста, помогите с этим.

Это было полезно?

Решение

Component.getService вызывает iserviceProvider.getService на экземпляре ISITE, назначенном свойству сайта компонента (при условии, что он есть). Вам не нужно, чтобы ваш экземпляр прокси унаследовал от компонента, но вам нужно будет предоставить ему доступ к ISITE/IServiceProvider.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top