Ответ может быть ошибкой в Виндзоре 2.5.1. Контракт для ITypedFactoryComponentSelector
предполагает, что если вы вернете нуль для ComponentType
, но не ноль для ComponentName
, поиск будет выполняться по имени, а не по типу. Но две проблемы встают у вас на пути, если вы попытаетесь это сделать.
Согласно источникам GitHub, код в DefaultTypedFactoryComponentSelector.BuildFactoryComponent
вызывает GetCompatibleArrayItemType
для того, что может быть нулевым указателем ComponentType, что вызывает исключение. Это похоже на ошибку, простую и понятную.
Если вы найдете способ обезопасить это, то, похоже, что метод TypedFactoryComponentResolver.Resolve
не совсем устраивает правильные перегрузки ядра для разрешения в случаях, когда ComponentType равен нулю. Мне гораздо менее понятно, является ли это ошибкой или отсутствием в моем понимании того, какие методы IWindsorContainer.Resolve
делают. Тем не менее, отправка различным методам (Resolve<object>(string key)
, например), кажется, делает свое дело.
Оба класса незапечатаны, так что это легко исправить с помощью производных классов.