Единица: Замените зарегистрированный тип другим типом во времени выполнения

У нас есть сценарий, где пользователь может выбрать между другими аппаратными средствами во времени выполнения. В фоновом режиме у нас есть несколько различных аппаратных классов который вся реализация IHardware интерфейс. Мы хотели бы использовать Единицу для регистрации в настоящее время выбираемого аппаратного экземпляра для этого интерфейса. Однако, когда пользователь выбирает другие аппаратные средства, это потребовало бы, чтобы мы заменили эту регистрацию во времени выполнения.

Следующий пример мог бы сделать это более ясным:

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: Я абсолютно знаю, что экземпляры, которые были уже разрешены от контейнера, не будут заменены новыми экземплярами, конечно. Мы заботились бы об этом сами, вынуждая их разрешить экземпляр еще раз.

30
задан gehho 23 April 2010 в 09:59
поделиться

1 ответ

Метод RegisterInstance контейнера UnityContainer всегда будет переопределять последнюю регистрационную запись, если вы не различите их по имени.

Таким образом, если вы вызовете

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

, вы отмените регистрацию для интерфейса IHardware и получите HardwareB при следующей попытке разрешения

45
ответ дан 28 November 2019 в 00:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: