Sure - the IServiceProvider interfaz ha sido parte de Framework desde la 1.0. Esto no es DI porque generalmente se trata aquí (usando un "kernel"), pero es IoC usando el patrón de Localizador de Servicio.
Si se mira en cualquier parte del código Diseñador de Windows Forms, usted lo verá salpicada generosamente con líneas como ésta:
IDesignerOptionService service =
(IDesignerOptionService)this.GetService(typeof(IDesignerOptionService));
Si está trabajando con un Component, a continuación, tendrá acceso a esto a través de la propiedad Site. Es bastante común y requiere conocimiento práctico al crear controles personalizados.
Esta es la ubicación del servicio, ejemplo de libro de texto. Tiene un IServiceProvider
genérico que entrega los servicios abstractos que solicita por tipo de servicio. Si alguna vez desea crear diseñadores personalizados, etiquetas inteligentes, etc., debe saber todo esto. Es similar para ASP.NET también.
P.S. Por favor, no useIServiceProvider
en el nuevo código. Es una interfaz muy antigua, no genérica. Si está creando bibliotecas reutilizables que requieren un contenedor IoC para poder funcionar, debe usar el Common Service Locator. Pero ni siquiera use que a menos que exija absolutamente que su biblioteca sea independiente de la biblioteca DI utilizada en el nivel de la aplicación; la mayoría de los contenedores/kernels específicos de la implementación ofrecen API mucho más ricas que perderás si te clavas al CSL.
supongo que no puedo competir con alguien que escribió un libro sobre el tema .. .Estoy contento de haber encontrado uno de los ejemplos de la lista. Jaja. –
@Mark Seemann: Estoy en los primeros 5 capítulos (partes 1 y 2) de su libro. En mi opinión, este libro debe * requerirse * leer no solo para desarrolladores de .Net, sino para cualquier programador orientado a objetos. Cosas realmente geniales! Me ha abierto los ojos a tantos errores que he cometido en particular y realmente me ha abierto la mente sobre mejores formas de programar. Sigan con el buen trabajo! –