У нас есть сценарий, в котором пользователь может выбирать между различными аппаратными средствами во время выполнения. В фоновом режиме у нас есть несколько различных классов оборудования, которые реализуют интерфейс IHardware
. Мы хотели бы использовать Unity для регистрации текущего выбранного аппаратного экземпляра для этого интерфейса. Однако когда пользователь выбирает другое оборудование, это потребует от нас замены этой регистрации во время выполнения.
Следующий пример может прояснить ситуацию:
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());
Можно ли так или иначе добиться этого поведения?
Кстати: я полностью осознаю, что экземпляры, которые уже были разрешены из контейнера, конечно, не будут заменены новыми экземплярами. Мы бы сами позаботились об этом, заставив их еще раз разрешить проблему.