当spring.net框架启动asp.net应用程序时,注册IoC容器中所有对象的组件会重新计算web.config中引用的所有子目录吗?
例如
<spring>
<context>
<resource uri="~/bin/ClientService/ClientService.config"/>
<resource uri="~/MCFModule.config"/>
</context>
</spring>
我相信答案是查看调试信息(跟踪侦听器)输出。
我遇到的问题是,当它试图在'\ bin \ clientservice'目录中创建一个实例时,即使dll存在于子目录中,它也会失败并显示错误消息;
'无法加载文件或程序集'log4net,Version = 1.2.10.0,Culture = neutral,PublicKeyToken = 1b44e1d426115821'或其依赖项之一。该系统找不到指定的文件。 “
有人有任何想法吗?
干杯
奥利
答案 0 :(得分:2)
您还可以使用选项以编程方式处理装配负载故障
AppDomain类上的AppDomain.AssemblyResolve
事件。
答案 1 :(得分:0)
当Spring.NET尝试在其配置文件中解析引用时,它将使用与.NET程序集加载器相同的rules。因此,您可以尝试在bin文件夹中添加正确的log4net程序集引用。
编辑:如果您希望Spring.NET在非标准位置找到程序集,您可以使用<assemblyBinding>元素来指示位置:
<?xml version="1.0" encoding="utf-8" ?>
<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"/>
</context>
<objects xmlns="http://www.springframework.net">
<object id="someObject" type="log4net.Util.AppenderAttachedImpl, log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821" />
</objects>
</spring>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="log4net"
publicKeyToken="1b44e1d426115821"
culture="neutral" />
<codeBase version="1.2.10.0
href="file:///c:/some_special_location/log4net.dll" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
然后你可以要求容器实例化对象:
var someObject = ContextRegistry.GetContext().GetObject("someObject");