Конечно - интерфейс IServiceProvider является частью Framework с 1.0.Это не DI, как это обычно обсуждается здесь (с использованием «ядра»), но это IoC, использующий шаблон Service Locator.
Если вы покопаетесь в любом из кодов Windows Forms Designer, выувидим, что он щедро усыпан такими строками, как эта:
IDesignerOptionService service =
(IDesignerOptionService)this.GetService(typeof(IDesignerOptionService));
Если вы работаете с Компонентом , то вы получите доступ к этому через свойство Site ,Это довольно распространенное и практически необходимое знание при создании пользовательских элементов управления.
Это расположение службы, пример из учебника.У вас есть общий IServiceProvider
, который раздает абстрактные услуги, которые вы запрашиваете по типу службы.Если вы когда-нибудь захотите создать нестандартные дизайнеры - смарт-теги и т. Д. - вам нужно знать все это.Это похоже и на ASP.NET.
PS Пожалуйста, не используйте IServiceProvider
в новом коде.Это очень старый, не универсальный интерфейс.Если вы создаете многократно используемые библиотеки, для работы которых требуется контейнер IoC, вам следует использовать вместо этого Common Service Locator .Но даже не используйте , , если только вы абсолютно не требуете, чтобы ваша библиотека была независимой от библиотеки DI, используемой на уровне приложения;большинство специфичных для реализации контейнеров / ядер предлагают гораздо более богатые API, которые вы пропустите, если прибегнете к CSL.