Причина в том, что зависимость устанавливается дважды: сначала в качестве параметра .ctor, а затем снова в качестве свойства
Виндзор выполняет не сопоставление имени параметра с учетом регистракогда вы сопоставляете свои параметры из конфигурации xml и от анонимного типа, а передаваемый строковый аргумент имеет приоритет над xml, как и следовало ожидать.
Однако вы дали ему Hashtable
, который вы установили для be с учетом регистра, и Виндзор соблюдает это.
Таким образом, он соответствует аргументу a
.ctor, но затем он устанавливает свойство A
, а Hashtable
не предоставляетзначение для этого, поэтому он получает один из вас XML.
Относительно
, если я поменяю местами разрешения opt1 и opt2, утверждение 2 не будет выполнено.
Youя не опубликовал вашу конфигурацию xml, но я подозреваю, что образ жизни компонента одноэлементный, и в этом случае второй вызов Resolve
просто даст вам объект, созданный первым вызовом, и любые аргументы, которые вы передадите, будут проигнорированы.
Обычно вы, вероятно, не выставляете сеттеры для свойств, устанавливаемых через .ctor, и сохраняете их только для чтения.