Spring.net不在父容器中查找定义

时间:2012-08-29 21:43:58

标签: spring.net spring.codeconfig

在我的项目中,我有两个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()

我正在尝试将代码配置添加到使用后一种方法的项目(有点大),我非常希望保留所有这些代码行。

0 个答案:

没有答案