2013-03-19 42 views

risposta

14

È possibile utilizzare questo:

var services = 
    context.ComponentRegistry.Registrations.SelectMany(x => x.Services) 
      .OfType<IServiceWithType>() 
      .Select(x => x.ServiceType); 
+0

dovuto cambiare il Selezionare per un Dove, al fine di ottenere indietro un IEnumerable di servizi. var services = context.ComponentRegistry.Registrations.SelectMany (x => x.Services) .OfType () .Where (x => x.ServiceType); – NovaJoe

+1

@NovaJoe: Questo non è possibile: il tuo codice non verrebbe compilato, perché 'ServiceType' non è un' bool'. E non avrebbe comunque molto senso ... –

+0

Spiacente, ho dimenticato una parte dell'istruzione: var services = container.ComponentRegistry.Registrations.SelectMany (x => x.Services) .OfType (). Dove (x => x.ServiceType == serviceType); Nota il controllo di uguaglianza per un tipo di servizio specifico. Inoltre, ho un contenitore al posto del contesto, che è un IContainer di AutoFac. – NovaJoe

-2

Come ho risolto è

var alldb = (from r in MasterDataFactory.Container.ComponentRegistry.Registrations 
       let s = r.Services.Where(i => i is KeyedService).Select(i => i as KeyedService).FirstOrDefault() 
       where s!=null && s.ServiceType==typeof(ISomeInterface) 
       select s).ToList(); 
Problemi correlati