Spring.net не ищет определение в родительском контейнере
В моем проекте у меня есть 2 конфигурации для весны, одна в коде и одна в XML. Контекст кода загрузит объекты-макеты, определенные в классе MockConfigurations. Конфигурация xml определена в app.config. Я устанавливаю конфиг xml как родительский конфиг кода.
public static IApplicationContext GetMergedContainer()
{
var scanner = new AssemblyObjectDefinitionScanner();
scanner.IncludeType<MockConfigurations>();
var context = new CodeConfigApplicationContext(ContextRegistry.GetContext());
context.Scan(scanner);
context.Refresh();
return context;
}
В весенней документации ( http://www.springframework.net/doc-latest/reference/html/web.html) говорится: если определение ссылочного объекта не найдено в текущем контексте, Spring.NET ищет все контексты предка в контекстной иерархии до тех пор, пока не найдет определение объекта (или, в конечном счете, произойдет сбой и возникнет исключение).
Это не работает для меня:
var element = GetMergedContainer().GetObject<IElement>();
throws Spring.Objects.Factory.NoSuchObjectDefinitionException: Объект с именем '[Namespace].IElement' не определен: запрошенный тип не определен в контексте.
Работает ли получение объекта от родителя нормально:
var element = GetMergedContainer().ParentContext.GetObject<IElement>();
Я что-то пропустил? Кто-нибудь преуспел в установке контекста XML в качестве родителя контекста кода?
Любая помощь будет оценена.
Заранее спасибо.
Я использую Spring.Core.1.3.2 и Spring.CodeConfig.1.0.4
[ОБНОВИТЬ]
Я воссоздаю ситуацию с помощью более простого кода ( http://www.springframework.net/codeconfig/refdoc/migration-example.html)
Я снова поставил XML-конфигурацию в качестве родительского для конфигурации кода и попытался разрешить объект из контекста кода, который существует только в контексте XML (родительского).
Это работает:
ConsoleReport report = ctx["ConsoleReport"] as ConsoleReport;
ConsoleReport report = ctx.GetObject("ConsoleReport") as ConsoleReport;
Это не удается:
ConsoleReport report = ctx.GetObject<ConsoleReport>();
Ошибка заключается в следующем:
Spring.Objects.Factory.NoSuchObjectDefinitionException не обработан. Сообщение = Объект с именем 'Spring.Evaluation.ConsoleReport' не определен: Запрошенный тип не> Определен в контексте. Source=Spring.Core.Configuration ObjectName=Spring.Evaluation.ConsoleReport StackTrace: at Spring.Context.ApplicationContextExtensions.GetObject[T](контекст IApplicationContext) в c:_prj\spring-net-codeconfig\src\Spring.Core.Configuration\Context\Extension\ApplicationContextExtensions.cs: строка 69 в Spring.Evaluation.Program.Main(String[] args) в каталоге c:\users\oscar\documents\visual studio 2010\Projects\Spring.Evaluation\Spring.Evaluation\Program.cs: строка 16 в System.AppDomain._nExecuteAssembly(сборка RuntimeAssembly, аргументы String []) в System.AppDomain.ExecuteAssembly(аргументы String assemblyFile, Evidence assemblySecurity, String[]) в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsers. System. k обратный вызов, состояние объекта) в System.Threading.ThreadHelper.ThreadStart ()
Я пытаюсь добавить конфигурацию кода в проект (немного большой), который использует более поздний подход, и я бы очень хотел сохранить все эти строки кода такими, какие они есть.