Unity Registrieren Sie für eine Schnittstelle mehrere Objekte und teilen Sie Unity mit, wo sie injiziert werden sollen

Hallo, ich hatte Probleme damit, Unity mitzuteilen, dass ein Interface, wenn es mehrere Implementierungen hat, diese in verschiedene Klassen einspeisen soll. Hier ist, was ich meine:

Nehmen wir an, ich habe eine SchnittstelleIProductCatalogService und zwei ImplementierungenProductCatalog : IProductCatalogService undProductCatalogService : IProductCatalogService.

Wie würde ich Unity mitteilen, dass für die Klasse A, die ich in meinem Konstruktor haben möchte, eine Instanz des Typs übergeben wurde?ProductCatalog und für die KlasseB Ich möchte eine Instanz vonProductCatalogService.

Ich verwende Unity in einem ASP.NET-Web-API-Projekt und habe den Resolver in der festgelegtGLobalConfiguration.

Bei einfachen 1 zu 1 Anmeldungen funktioniert alles.

Folgendes habe ich versucht, aber es scheint nicht zu funktionieren:

public class DependencyServiceModel
{
    public Type From { get; set; }
    public Type To { get; set; }
    public IEnumerable<Type> ForClasses { get; set; }
}

public void RegisterTypeForSpecificClasses(DependencyServiceModel dependencyService)
{
    foreach (var forClass in dependencyService.ForClasses)
    {
        string uniquename = Guid.NewGuid().ToString();

        Container.RegisterType(dependencyService.From, 
            dependencyService.To, uniquename);

        Container.RegisterType(forClass, uniquename, 
            new InjectionConstructor(
                new ResolvedParameter(dependencyService.To)));
    }
}

In demDependencyServiceModel, From ist die Schnittstelle,To ist das Objekt, das ich instanziieren möchte undForClasses sind der Typ, für den ich den verwenden möchteTo Objekt.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage