ASP.NET - Unity - чтение раздела конфигурации из внешнего файла конфигурации - PullRequest
4 голосов
/ 15 февраля 2012

Я хочу интегрировать Unity в свое приложение, и я хочу, чтобы он использовал внешний файл конфигурации

Код инициализации Unity:

var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = "unity.config" };
System.Configuration.Configuration configuration =
ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);

// *** problem starts here ***
var unitySection = (UnityConfigurationSection)configuration.GetSection("unity");
var container = new UnityContainer().LoadConfiguration(unitySection);

Также у меня есть внешний файл конфигурации для Unity,с именем "unity.config" со следующим содержимым

<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
  <alias alias="IEmailConfigurator" type="Server.Common.Interfaces.IEmailConfigurator, Server.Common" />
  <alias alias="EmailConfigurator" type="Server.Common.EmailConfigurator, Server.Common" />

  <namespace name="Server.Common.Interfaces" />
  <namespace name="Server.Common" />

  <container>
    <register type="IEmailConfigurator" mapTo="EmailConfigurator" />
  </container>
</unity>  

Проблема заключается в том, что в строке, где я хочу загрузить unitySection, GetSection () возвращает значение null.

В чем может быть проблема?


РЕДАКТИРОВАТЬ

Я добавил

<configuration>
    <configSections>
        <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>
        </configSections>

Однако теперь, когда я отслеживаю код, в строке

System.Configuration.Configuration configuration = //...

Переменная конфигурации в инициализированном свойстве FilePath: C: \ Program Files (x86) \ IIS Express \ unity.config, а не мой собственный файл unity.config

Любая идея, как ссылаться на конфигурациюфайл из веб-папки?

Спасибо.

Ответы [ 4 ]

0 голосов
/ 18 марта 2016

Для доступа к веб-папке используйте метод HttpServerUtility.MapPath.

var mappedConfig = Server.MapPath("~/unity.config");

Сервер является свойством страницы или используйте HttpContext.Current.Server.

0 голосов
/ 16 февраля 2012

http://msdn.microsoft.com/en-us/library/ff660935%28v=pandp.20%29.aspx

Ваш внешний файл конфигурации также должен начинаться с тега <configuration>, а не <unity> тега

0 голосов
/ 02 августа 2013

Я не знаю, решили ли вы это еще. В Visual Studio необходимо обеспечить следующие свойства файла для «Unity.config»:

  • Действие сборки -> «Содержимое»
  • Копировать в выходной каталог -> «Копировать, если новее» или «Копировать всегда»

Я предлагаю «Копировать всегда», чтобы текущая конфигурация Unity всегда присутствовала после сборки.

0 голосов
/ 16 февраля 2012

Вы пытались добавить элемент <configuration> и <configSections> в файл конфигурации?

...