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