Ответ 1
ОК, это возможно. Благодаря Krzysztof Koźmic за то, что он показал мне, как это сделать. Не сразу очевидно, но вы можете использовать диагностическую подсистему Windsor для выявления потенциальных проблем с регистрацией. Я собрал небольшой статический метод, который бросает, если есть какие-то неправильно сконфигурированные компоненты:
private static void CheckForPotentiallyMisconfiguredComponents(IWindsorContainer container)
{
var host = (IDiagnosticsHost)container.Kernel.GetSubSystem(SubSystemConstants.DiagnosticsKey);
var diagnostics = host.GetDiagnostic<IPotentiallyMisconfiguredComponentsDiagnostic>();
var handlers = diagnostics.Inspect();
if (handlers.Any())
{
var message = new StringBuilder();
var inspector = new DependencyInspector(message);
foreach (IExposeDependencyInfo handler in handlers)
{
handler.ObtainDependencyDetails(inspector);
}
throw new MisconfiguredComponentException(message.ToString());
}
}
Вы можете использовать его следующим образом:
var container = new WindsorContainer().Register(
Component.For<IRoot>().ImplementedBy<Root>()
);
CheckForPotentiallyMisconfiguredComponents(container);
В этом случае я получаю MisconfiguredComponentException с этим сообщением:
'WindsorSpikes.Root' is waiting for the following dependencies:
- Service 'WindsorSpikes.IChild' which was not registered.
WindsorSpikes.MisconfiguredComponentException:
'WindsorSpikes.Root' is waiting for the following dependencies:
- Service 'WindsorSpikes.IChild' which was not registered.
Более подробную информацию о диагностической подсистеме см. в документации к замку:
http://stw.castleproject.org/Default.aspx?Page=Debugger-views&NS=Windsor