Я объединил информацию о строках соединения для ряда доступных мне C# .NET-решений. Раньше каждый проект хранил строку соединения в своем собственном формате, требуя, чтобы я модифицировал несколько файлов для каждой установки программного обеспечения.Замок Windsor/ActiveRecord/NHibernate: как перехватить/изменить строку подключения
Только одно оставшееся решение дает мне проблемы. Это конкретное решение использует Castle Windsor 2.0, ActiveRecord 2.0 и NHibernate 2.1. Код считывает конфигурацию из файла XML. Я хочу удалить строку подключения из файла конфигурации и установить ее программно в коде.
Вот соответствующий раздел кода, который инициирует Виндзор:
windsorContainer = new WindsorContainer(new XmlInterpreter(xmlFileName));
windsorContainer.Resolve<IWindsorConfigurator>().Configure(windsorContainer);
logger = windsorContainer.Resolve<ILogger>();
Вот содержимое файла XML:
<?xml version="1.0"?>
<configuration>
<properties>
<connectionString>Server=*****;Database=*****;User Id=*****;Password=*****</connectionString>
</properties>
<facilities>
<facility id="logging" type="Castle.Facilities.Logging.LoggingFacility, Castle.Facilities.Logging" loggingApi="log4net" configFile="Configs/log4net.config" />
<facility id="atm" type="Castle.Facilities.AutomaticTransactionManagement.TransactionFacility, Castle.Facilities.AutomaticTransactionManagement" />
<facility id="arfacility" type="Castle.Facilities.ActiveRecordIntegration.ActiveRecordFacility, Castle.Facilities.ActiveRecordIntegration" isDebug="false" isWeb="false">
<!-- Configure the namespaces for the models using Active Record Integration -->
<assemblies>
<item>ChronoSteril.Application</item>
</assemblies>
<config>
<add key="connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
<add key="dialect" value="NHibernate.Dialect.MsSql2005Dialect" />
<add key="connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
<add key="connection.connection_string" value="#{connectionString}" />
<add key="hibernate.cache.provider_class" value="NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache" />
<add key="proxyfactory.factory_class" value="NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle" />
<add key="hibernate.expiration" value="60" />
</config>
</facility>
</facilities>
<components>
<component id="windsorConfigurator" service="ChronoSteril.Application.IWindsorConfigurator, ChronoSteril.Application" type="ChronoSteril.WinApp.ClarionIntegrationWindsorConfigurator, ChronoSteril.WinApp" />
</components>
Я не знаком с Виндзор. Во время моего тура Google я видел код, который добавляет возможности программно, но эти примеры недействительны для моей версии Windsor (Я предполагаю, что).
Вопрос: Может ли кто-нибудь помочь мне удалить информацию строки соединения из файла XML и разрешить мне установить ее в коде?
Спасибо!
[Этот вопрос SO] (http://stackoverflow.com/questions/4456652/programmatically-configure-activerecordfacility-for-multiple-databases) содержит ссылку на статью об использовании 'InPlaceConfigurationSource' для программной инициализации средства ActiveRecord , Это может сработать за то, что вы делаете: – PatrickSteele
Спасибо за ваш комментарий. Хотя ваша ссылка или связанная с ней ссылка напрямую разрешили мою проблему, они помогли мне уточнить критерии поиска, и я смог найти решение, которое разрешило мою проблему. Я представляю его ниже. –