0

我有一个加载其他库(DLL)的控制台应用程序。我正在使用 Spring.NET。我的控制台应用程序很简单,加载通过 DI 配置的 app.config 来初始化选择的库。

代码

ContextRegistry.GetContext();

配置 (app.config)

<?xml version="1.0"?>
<configuration>
    <configSections>
        <sectionGroup name="spring">
            <section name="context" 
               type="Spring.Context.Support.ContextHandler, Spring.Core"/>
            <section name="objects" 
               type="Spring.Context.Support.DefaultSectionHandler, Spring.Core"/>
    </sectionGroup>
</configSections>

<spring>
    <context>
        <resource uri="config://spring/objects"/>
        <resource uri="assembly://MyDLL/MyDLL.Config/Services.xml"/>
    </context>
    <objects xmlns="http://www.springframework.net" 
             xmlns:aop="http://www.springframework.net/aop">
    </objects>
</spring>
<startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup></configuration>

每个库都有自己的“services.xml”文件。这些库也使用 Spring.NET。

<objects xmlns="http://www.springframework.net" 
         xmlns:aop="http://www.springframework.net/aop">

<object id="componentObj" 
        type="MyDLL.Services.ComponentService, MyDLL" 
        singleton="true" />

<object 
 id="componentServiceHost" 
 type="Spring.ServiceModel.Activation.ServiceHostFactoryObject, Spring.Services">
    <property name="TargetName" 
              value="componentObj" />
</object>
</objects>

获取异常“由于 StackOverflowException 而终止进程。” 如果我注释掉<object id="componentServiceHost",则不会发生异常。

调试中的 VS 控制台显示

System.ServiceModel.dll 中出现“System.InvalidOperationException”类型的第一次机会异常

在 Spring.Core.dll 中发生了“Spring.Objects.Factory.ObjectCreationException”类型的第一次机会异常

在 Spring.Core.dll 中发生了“Spring.Objects.Factory.ObjectCreationException”类型的第一次机会异常

Managed (v4.0.30319)' 已退出,代码为 -2147023895 (0x800703e9)。

4

1 回答 1

1

您还可以将 spring 配置放在纯 xml 文件中,并将它们包含在您的库中。这样,您可以轻松共享此配置,而无需共享 app.config。

您必须在主机控制台应用程序的配置中明确引用此配置文件,但这不是重复的。您的控制台应用程序主机的 app.config将如下所示

...
<spring>
  <context>
    <resource uri="file://services.xml"/>
    <resource uri="assembly://MyAssembly/MyDataAccess/data-access.xml"/>
  </context>
</spring>

请参阅 spring.net 文档如何在 xml 中配置配置

于 2013-01-04T08:47:28.590 回答