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.