Mamy scenariusz, w którym użytkownik może wybierać między różnymi urządzeniami w czasie wykonywania. W tle mamy kilka różnych klas sprzętowych, które implementują interfejs IHardware
. Chcielibyśmy użyć Unity, aby zarejestrować aktualnie wybraną instancję sprzętową dla tego interfejsu. Jednak gdy użytkownik wybierze inny sprzęt, wymagałoby to zastąpienia tej rejestracji w środowisku wykonawczym.Unity: Zastąp zarejestrowany typ innym typem w środowisku wykonawczym
Poniższy przykład może zrobić to jaśniej:
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());
Czy takie zachowanie można osiągnąć jakiś sposób?
BTW: Jestem całkowicie świadomy, że instancje, które zostały już usunięte z kontenera, nie zostaną oczywiście zastąpione nowymi instancjami. Zadbamy o to sami, zmuszając ich do ponownego rozpatrzenia instancji.
to jest fajne, nie wiem/spróbować. Wielkie dzięki! – gehho