На данный момент у меня есть приложение, использующее Autofac. Я структурировал свой autofac так, чтобы он регистрировался из файла конфигурации после загрузки модулей. (Для переопределения поведения по умолчанию на основе xml).
Прямо сейчас у меня есть класс с кучей основных настроек окружения (на самом деле это множество общедоступных автоматических свойств). Этот класс пытается угадать конфигурацию по умолчанию на основе некоторых параметров, но идея состоит в том, что каждая среда, в которой работает приложение, переопределяет эти параметры в конфигурации xml.
Вот моя проблема:
Ранее в разработке этой системы все было прекрасно. Теперь кажется, что он полностью игнорирует ввод XML-конфигураций. Я не уверен, что изменилось, что привело к поломке, поэтому я надеюсь, что кто-то может указать на что-то очевидное, что я делаю неправильно.
Я проверил, что файл конфигурации читается/анализируется autofac, но не применяется.
web.config:
<autofac>
<files>
<file name="Config/Environment.config" section="autofac-common" />
<file name="Config/Environment.config" section="autofac-public" />
</files>
</autofac>
Environment.config:
<configuration>
<configSections>
<section name="autofac-common" type="Autofac.Configuration.SectionHandler, Autofac.Configuration"/>
<section name="autofac-public" type="Autofac.Configuration.SectionHandler, Autofac.Configuration"/>
</configSections>
<!-- Common -->
<autofac-common>
<components>
<component type="MyApp.Web.Configuration.ServerConfiguration, MyApp.Web"
service="MyApp.Web.Configuration.IServerConfiguration, MyApp.Web">
<properties>
<property name="Host" value="beta.mysite.com" />
<property name="MediaHost" value="beta.media.mysite.com" />
</properties>
</component>
</components>
</autofac-common>
<!-- Web Site -->
<autofac-public>
<modules>
<module type="MyApp.Configuration.CachingModule, MyApp">
<properties>
<property name="Disable" value="true" />
</properties>
</module>
</modules>
</autofac-public>
</configuration>
Правила создания контейнеров
var builder = new ContainerBuilder();
// Register Identifier so it's available to modules
builder.RegisterType<ServerIdentifier>()
.As<IServerIdentifier>()
.SingleInstance();
var container = builder.Build();
builder = new ContainerBuilder();
builder.RegisterModule(new CachingModule() { Disable = true });
builder.RegisterModule(new LoggerModule());
builder.RegisterModule(new InventoryModule());
builder.RegisterModule(new CatalogModule());
builder.RegisterModule(new WebModule(container));
// Override with settings from XML
builder.RegisterModule(new ConfigurationSettingsReader("autofac"));
builder.Update(container);
Версия Autofac 2.3.2.632
для .NET 3.5.