4

在我的项目中,我有 2 个 spring 配置,一个在代码中,一个在 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;
}

在 spring 文档(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

[更新]

我正在用更简单的代码(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 context) in c:_prj\spring-net-codeconfig\src\Spring.Core.Configuration\ Context\Extension\ApplicationContextExtensions.cs:c:\users\oscar\documents\visual studio 2010\Projects\Spring.Evaluation\Spring.Evaluation\Program 中 Spring.Evaluation.Program.Main(String[] args) 的第 69 行。 cs:System.AppDomain._nExecuteAssembly 的第 16 行(RuntimeAssembly 程序集,String [] args)在 System.AppDomain.ExecuteAssembly(字符串 assemblyFile,

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

4

0 回答 0