Название взято из локализованного MSDN. Признаться, я не большой любитель локализации профессиональных приложений и – особенно – терминов. В оригинале это называется Application Extension Service. Здесь же будем использовать простое слово “служба” (хотя на языке так и вертится “сервис”).
Как можно узнать из той же MSDN, есть два способа сделать что-то глобальное на уровне приложения: либо создав потомка Application, либо используя эти самые службы. Использование служб – на мой взгляд – более элегантное решение.
Итак, служба по своей сути класс, который реализует интерфейс IApplicationService (как минимум, как максимум – смотри ниже). Это два метода – StartService и StopService. Первый вызывается когда приложение запускается, второй – когда закрывается (грубо говоря). Объекты наших служб добавляем в коллекцию Application.ApplicationLifetimeObjects (программно или в XAML). Порядок имеет значение. Методы StartService вызываются в той последовательности, в которой наши объекты были добавлены (StopService в обратной).
Обычно службы выглядят так:
static public AppService Current { get; set; }
public void StartService(ApplicationServiceContext context)
{
Current = this;
}
При запуске службы инициализируется статическое поле, куда записывается ссылка на текущий объект (который мы добавили в коллекцию ApplicationLifetimeObjects). Теперь к этой службе мы можем обращаться из любого места программы через статическое поле AppService.Current. В отличии от обычного класса со статической instance-переменной, у служб есть большой плюс: мы точно знаем когда и в каком порядке будут “запущены” и “остановлены” службы. Кроме того, существует интерфейс IApplicationLifetimeAware, который позволяет более детально отслеживать время жизни службы: Starting, Started. Exiting, Exit.
Порядок вызова и более детальное описание можно посмотреть в той же статье MSDN.