0

Я объединил информацию о строках соединения для ряда доступных мне 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 и разрешить мне установить ее в коде?

Спасибо!

+0

[Этот вопрос SO] (http://stackoverflow.com/questions/4456652/programmatically-configure-activerecordfacility-for-multiple-databases) содержит ссылку на статью об использовании 'InPlaceConfigurationSource' для программной инициализации средства ActiveRecord , Это может сработать за то, что вы делаете: – PatrickSteele

+0

Спасибо за ваш комментарий. Хотя ваша ссылка или связанная с ней ссылка напрямую разрешили мою проблему, они помогли мне уточнить критерии поиска, и я смог найти решение, которое разрешило мою проблему. Я представляю его ниже. –

ответ

0

Мне удалось выполнить мое намерение. Это не идеально, но будет работать до тех пор, пока база кода не будет перезаписана. (я не могу ждать, чтобы сбросить существующий код, как дурной сон.)

комментария Патрика, под моим первоначальным вопросом, позвольте мне уточнить мои критерии поиска, которые дали нить, расположенную here.

Мой XML-файл остается тем же, за исключением того, что я использую фиктивные значения для информации о строках соединения. Мне никогда не понадобится их модифицировать, и они не раскрывают никакой действительной информации о соединении. Это было мое намерение. Я до сих пор не обнаружил, как успешно удалить конфигурацию ActiveRecord из файла XML и настроить с помощью кода.

я теперь вызвать метод, который содержит следующий код:

ISessionFactoryHolder sessionFactoryHolder = ActiveRecordMediator.GetSessionFactoryHolder(); 
NHibernate.Cfg.Configuration configuration = sessionFactoryHolder.GetConfiguration(typeof(ActiveRecordBase)); 
connectionString = ReadConnectionString(); 
configuration.SetProperty("connection.connection_string", connectionString); 

Это работает для меня. Я надеюсь, что он также поможет кому-то другому, кто находится на той же позиции, что и я.

 Смежные вопросы

  • Нет связанных вопросов^_^