Mehrere Implementierungen eines Interfaces
- Matt
Zwei Implementierungen desselben Interfaces waren im eingebauten Container immer unangenehm. Man brauchte eine Factory oder ein Marker-Interface.
Seit .NET 8:
builder.Services.AddKeyedSingleton<IVersand, DhlVersand>("dhl");
builder.Services.AddKeyedSingleton<IVersand, HermesVersand>("hermes");
Aufgelöst wird über ein Attribut am Parameter:
public class Bestellabschluss(
[FromKeyedServices("dhl")] IVersand versand) { ... }
Das ist knapp, hat aber einen Preis: Die Zeichenkette ist nirgends geprüft. Ein Tippfehler fällt erst beim Auflösen zur Laufzeit auf. Konstanten helfen, ein enum als Schlüssel ist noch besser, denn auch der ist erlaubt.