Einheit: Ersetzen registriert Typs mit einem anderen Typ zur Laufzeit
Wir haben ein Szenario, wo der Benutzer kann wählen zwischen verschiedenen hardware zur Laufzeit. Im hintergrund haben wir verschiedene hardware-Klassen, die alle implementieren eine IHardware
- Schnittstelle. Wir wollen die Einheit zum registrieren des aktuell ausgewählten hardware-Instanz für die Schnittstelle. Allerdings, wenn der Benutzer wählt eine andere hardware, dies würde von uns verlangen zu ersetzen, die Registrierung zur Laufzeit.
Folgende Beispiel mag dies verdeutlichen:
public interface IHardware
{
//some methods...
}
public class HardwareA : IHardware
{
//...
}
public class HardwareB : IHardware
{
//...
}
container.RegisterInstance<IHardware>(new HardwareA());
//user selects new hardware somewhere in the configuration...
//the following is invalid code, but can it be achieved another way?
container.ReplaceInstance<IHardware>(new HardwareB());
Kann dieses Verhalten erreicht werden, irgendwie?
BTW: ich bin mir völlig bewusst, dass Fälle, die bereits gelöst wurden, aus dem container werden nicht ausgetauscht mit der neuen Instanzen, natürlich. Würden wir kümmern uns selbst durch Sie zu zwingen, beheben Sie die Instanz erneut.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Methode RegisterInstance der UnityContainer immer überschreiben der letzten Registrierung der Einreise, wenn Sie nicht unterscheiden, Sie mit Namen.
So, wenn Sie anrufen
werden Sie überschreiben die Anmeldung für das interface IHardware und wird retreive HardwareB auf die nächste Lösung versuchen