2016-07-29 11 views
0

auf einem ASP.NET-Core-Projekt Startup ich habe:ResolveAll bestimmten Typ mit Autofac

services.AddScoped<SingleInstanceFactory>(x => y => x.GetRequiredService(y)); 
services.AddScoped<MultiInstanceFactory>(x => y => x.GetRequiredServices(y)); 

Ich versuche Autofac 4 zu verwenden, anstatt so habe ich versucht:

builder.Register<SingleInstanceFactory>(y => z => y.Resolve(z)).InstancePerLifetimeScope(); 
builder.Register<MultiInstanceFactory>(y => z => y.ResolveAll(z)).InstancePerLifetimeScope(); 

Es scheint jedoch, Autofac hat keine ResolveAll-Methode.

Wie kann ich das lösen?

aktualisieren

Ich habe versucht, die folgenden Erweiterungen auch zu schaffen: es

public static T[] ResolveAll<T>(this IContainer container) { 
    return container.Resolve<IEnumerable<T>>().ToArray(); 
} 

public static Object[] ResolveAll(this IContainer container, Type type) { 
    Type enumerable = typeof(IEnumerable<>).MakeGenericType(type); 
    return (Object[])container.ResolveService(new TypedService(enumerable)); 
} 

Und verwenden Sie wie folgt vor:

x.Register<MultiInstanceFactory>(y => z => y.ResolveAll(z)).InstancePerLifetimeScope(); 

Aber ich bekomme die Fehlermeldung:

Cannot convert lambda expression to intended delegate type because some of the return types in the block are not implicitly convertible to the delegate return type 

Nicht sicher, was ich vermisse ... Irgendeine Idee?

Antwort

3

, um alle registrierten Dienst von T zu beheben, Sie IEnumerable<T>

Durch die Art und Weise lösen können, Sie einen Delegaten registrieren versuchen, die von Autofac ist nicht erforderlich (siehe delegate factory) und weil Autofac automatisch verwenden Zusammensetzung (siehe Composing Relationship Types) müssen Sie nichts registrieren.

Wenn Sie lösen möchten ein MultiInstanceFactory oder SingleInstanceFactory Sie brauchen nichts registrieren in Autofac

+0

mit Ihrem Code erhalte ich die Fehlermeldung: Kann nicht Lambda-Ausdruck bestimmt Delegattyp konvertieren, weil einige der Rückgabetypen in dem Block sind nicht implizit in den Delegaten Rückgabetyp –

+0

Ich habe auch eine Erweiterung, die als Update zu meiner Frage, aber ich bekomme den gleichen Fehler wie in Ihrem Code. Irgendeine Idee warum? –

+0

Was ist 'MultiInstanceFactory'? Versuchen Sie 'z => new MultiInstanceFactory (y.Resolve ...)' –