在我的项目中,我有两个spring配置,一个是code,一个是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>();
抛出Spring.Objects.Factory.NoSuchObjectDefinitionException:没有定义名为'[Namespace] .IElement'的对象:请求的类型未在上下文中定义。
从父项获取对象是否正常工作:
var element = GetMergedContainer().ParentContext.GetObject<IElement>();
我错过了什么吗?有没有人成功将XML上下文设置为代码上下文的父级?
任何帮助将不胜感激。
提前致谢。
我正在使用Spring.Core.1.3.2和Spring.CodeConfig.1.0.4
[UPDATE]
我用更简单的代码(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”的对象:请求的类型不是&gt;在上下文中定义。 来源= Spring.Core.Configuration 对象名= Spring.Evaluation.ConsoleReport 堆栈跟踪: 在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 [] args) 在System.AppDomain.ExecuteAssembly(String assemblyFile,Evidence assemblySecurity,String [] args) 在Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 在System.Threading.ThreadHelper.ThreadStart_Context(对象状态) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback callback,Object state,Boolean ignoreSyncCtx) 在System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback回调,对象状态) 在System.Threading.ThreadHelper.ThreadStart()
我正在尝试将代码配置添加到使用后一种方法的项目(有点大),我非常希望保留所有这些代码行。