Поймите 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.