Mehrere Implementierungen eines Interfaces

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.