Мы находимся в процессе миграции одного стабильного проекта с Castle Windsor 2.5.2 на 3.0.
Мы используем смешанную регистрацию xml / api.После перехода на 3.0 параметры, введенные через ctor и определенные в xml, больше не могут быть разрешены.
Для иллюстрации:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
...
<properties>
<frontEnd.url>http://site.com</frontEnd.url>
<admin.email>admin@site.com</admin.email>
</properties>
<components>
...
<component id="ServicesBootstrapperAction"
service="SomeNS.Startup.IBootstrapperAction"
type="SomeNS.Service.ServicesBootstrapperAction, Project-Service"
>
<parameters>
<frontEndUrl>#{frontEnd.url}</frontEndUrl>
<adminEmail>#{admin.email}</adminEmail>
<prohibitedLogins>Assets/prohibited-logins.txt</prohibitedLogins>
</parameters>
</component>
...
</components>
</configuration>
И регистрация:
_container.Install(
Castle.Windsor.Installer.Configuration.FromXmlFile("project.common.config"),
Castle.Windsor.Installer.Configuration.FromXmlFile(String.Format("project.{0}.config", RuntimeEnvironment))
);
После попытки разрешить этот компонент мы получаем:
'SomeNS.Service.ServicesBootstrapperAction' is waiting for the following dependencies:
- Parameter 'frontEndUrl' which was not provided. Did you forget to set the dependency?
- Parameter 'adminEmail' which was not provided. Did you forget to set the dependency?
- Parameter 'prohibitedLogins' which was not provided. Did you forget to set the dependency?
Опять же, это то, что отлично работает с 2.5, так что я думаю, что это может быть какое-то недокументированное (или пропущенное / не понятое нами) критическое изменение.
Дифференциальный диагноз, кто-нибудь?
ОБНОВЛЕНИЕ: Я выяснил проблему и нашел обходной путь.Мне это не нравится, но это работает.
Для всех любопытных, вот ссылка на проект, иллюстрирующий проблему: https://docs.google.com/open?id=0B7XFrOzGfmirSldZUmRQeU9SZDZZVnV5UGhGaGhsUQ
Не стесняйтесь сказать мне, что я неправ ичто я должен был использовать какое-то другое красивое решение (что?).