Я пытаюсь перезаписать регистрацию компонента (сделанную через xml) другой (в другом xml, загруженном через код с использованием container.Install(Configuration.FromXmlFile("..."))
, который имеет тот же идентификатор компонента, но я получаю сообщение об ошибке:
"Компонент COMP_ID не может быть зарегистрирован. Уже есть компонент с таким именем. Хотите вместо этого изменить существующий компонент? Если нет, убедитесь, что вы указали уникальное имя."
Дело в том, что я на самом деле хотел бы изменить существующий компонент , чтобы иметь возможность определить базовую разводку в базовом файле castle.xml, а затем перезаписать его в другом файле custom.xml., загруженный после основного.
Я пытаюсь использовать тот же идентификатор компонента, потому что, как мне показалось, он переписал бы предыдущую регистрацию.
Реальность такова, что я хотел бы изменить то, чтоРеализация используется для ответа на сервис, идентификатор компонента - это просто попытка, которую я сделал. Поскольку у Castle есть политика первичных регистраций, было бы достаточноh например, чтобы переключиться на последний выигрыш при регистрации, например.
Конкретный пример
Давайте использовать пример интерфейса ILogger
.
Базовый замок.xml (загруженный всегда ) будет выглядеть следующим образом:
<component id="logger" service="ILogger" type="NullLogger" ></component>
Файл castle.dev.xml (загружается только в dev ambient после значения по умолчанию)один) будет выглядеть следующим образом:
<component id="logger" service="ILogger" type="AspNetTraceLogger" ></component>
Файл castle.prod.xml (загружается только в производственной среде, после файла по умолчанию вместо dev one) будет выглядеть так:
<component id="logger" service="ILogger" type="SqlServerLogger" ></component>
Теперь: для каждой из этих конфигураций я хотел бы сказать «отвечать на запросы ILogger с этим impl», поэтому мне нужно иметь только одну из них дляотвечать на запросы ILogger каждый раз.
У кого-нибудь есть идеи?
update
Я добавлю: на данный момент я использую, скажем так, метод "обратной перезаписи", когда я загружаю перезаписываемые файлы "первым", перед соответствующими "по умолчанию".Таким образом, поскольку политика имеет приоритет, я могу объявить их перезаписанными, хотя внутренне они были объявлены ранее.Проблема с этим подходом заключается в том, что когда у меня есть интерфейс, который я знаю, будет реализован более одного раза (скажем, IWheverListener): в этом случае я не могу удалить другие уже зарегистрированные и не могу использовать первыйвыигрывает решение, потому что позже я буду использовать ResolveAll (), а также будут использоваться «значения по умолчанию».