У меня есть метод в UserControl с этим кодомПоймите Component.GetService()
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(). Пожалуйста, помогите с этим.
Спасибо, что работает. Я все еще плохо разбираюсь, но вызов GetService с рефери ISite - это все, что мне нужно. Мои сомнения в том, почему, когда я накладываю курсор на исходный метод GetService, Intellisense говорит мне, что это Component.GetService, что я на самом деле вызываю, а не IServiceProvider.GetService? – mjsr
Реализация Component.GetService вызывает метод GetService свойства Site. Intellisense показывает документацию, а не реализацию. Если вас интересуют детали реализации Component.GetService, вы можете захотеть захватить копию Reflector (http://www.red-gate.com/products/dotnet-development/reflector/). –
Я следую вашим советам относительно .net-отражателя. Затем я просматриваю реализацию GetService и точно так же, как вы говорите, его объект, который реализует ISite, окончательную ответственность за вызов метода GetService(). Какой впечатляющий инструмент, как им удается перестроить код, впечатляет. Я все еще чувствую, что у меня нет реального понимания модели компонентов, но это действительно помогает на пути просветления, :). Я продолжу поиск темы. – mjsr