Spring.net регенерирует подкаталоги? - PullRequest
0 голосов
/ 26 мая 2009

Когда среда 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, версия = 1.2.10.0, культура = нейтральная, PublicKeyToken = 1b44e1d426115821 'или одна из ее зависимостей. Система не может найти указанный файл. «

У кого-нибудь есть идеи?

Приветствия

Олли

Ответы [ 2 ]

2 голосов
/ 09 июня 2009

У вас также есть возможность программно обрабатывать сбои нагрузки сборки, используя AppDomain.AssemblyResolve событие в классе AppDomain.

Например, вы можете отсканировать все подкаталоги в поисках нужной вам сборки.

0 голосов
/ 26 мая 2009

Когда Spring.NET пытается разрешить ссылку в своем файле конфигурации, он будет использовать те же правила , что и загрузчик сборок .NET. Поэтому, возможно, вы можете попробовать добавить правильную ссылку на сборку log4net в папку bin.


РЕДАКТИРОВАТЬ: Если вы хотите, чтобы Spring.NET находил сборки в нестандартных местах, вы можете использовать элемент , чтобы указать местоположение:

<?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");
...