Вы можете использовать общую шину, подключить туда две сущности: Licensing и Service, а между ними поставить сущность, которая знает о событии LicenceChanged и знает, что при этом событии нужно перезапустить сервисы, а так же, как именно это можно сделать (обращается к Service). Если обращаться к Service по той же шине, то в ситуации, когда Service недоступен (не подключен например), ничего происходить и не будет -- то есть, не надо будет явно обрабатывать кейс с отсутствием Service внутри сущности-обвязки.
Плюс такого решения -- обвязка не зависит от кода конкретных реализаций License и Service. Строковую типизацию вы можете и не делать, если шина умеет в разные типы сообщений так или иначе -- в крайнем случае, хотя бы сериализацию для событий какую-то можно придумать. К тому же события все равно несут какую-то информацию помимо названия, так что какая-то структура этих событий не помешает. Но здесь я уже увлекся, ибо никаких таких вводных не было. :)
Я рассуждаю в рамках акторной системы, где такие сценарии мне обдумывать проще, но кажется, что и в C# внутри какого-то другого подхода это реализуемо. :)