2010-04-23 12 views
25

Wir haben ein Szenario, wo der Benutzer zur Laufzeit zwischen verschiedenen Hardware wählen kann. Im Hintergrund haben wir verschiedene Hardwareklassen, die alle eine IHardware Schnittstelle implementieren. Wir möchten mit Unity die aktuell ausgewählte Hardware-Instanz für diese Schnittstelle registrieren. Wenn der Benutzer jedoch eine andere Hardware auswählt, müssen wir diese Registrierung zur Laufzeit ersetzen.Unity: Ersetzt registrierten Typ durch einen anderen Typ zur Laufzeit

Das folgende Beispiel machen könnte dies deutlicher:

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 irgendwie erreicht werden?

BTW: Mir ist völlig klar, dass Instanzen, die bereits aus dem Container aufgelöst wurden, natürlich nicht durch die neuen Instanzen ersetzt werden. Wir würden uns selbst darum kümmern, indem wir sie zwingen, die Instanz noch einmal zu lösen.

Antwort

37

Die Methode RegisterInstance des UnityContainer überschreibt immer den letzten Registrierungseintrag, wenn Sie nicht nach Namen unterscheiden.

Also, wenn Sie

container.RegisterInstance<IHardware>(new HardwareB()); 

rufen Sie die Registrierung für die Schnittstelle IHardware außer Kraft gesetzt werden und wird HardwareB auf der nächsten Lösung Versuch

+0

retreive Das ist cool, nicht wusste/versuchen. Danke vielmals! – gehho

Verwandte Themen