Настроить Windsor IoC из XML-файла - специальные сообщения в значении XML-элемента - PullRequest
1 голос
/ 04 марта 2012

Я использую Castle Windsor IoC. Я хотел бы настроить объект в IoC из файла XML. Класс только POCO с некоторыми свойствами.

Моя проблема в том, что значением свойства является строка, содержащая специальные символы.

Например, вот XML, который я использую для настройки объекта в IoC.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <components>
    <component id="pokecUrls" 
               type="Pk.Common.Entities.Communication.PkcUrls, Pk.Common" 
               lifestyle="singleton">
      <parameters>

        <LogOn>https://pk.zet.com/overenie?isWap=0&uri=http%3A%2F%2Fpk.zet.com%2F</LogOn>

      </parameters>
    </component>
  </components>
</configuration>

Вот код C #:

_container.Install(Configuration.FromXmlFile("PkcCoreSettings\\PkUrls.xml"));
var urls = _container.Resolve<Pkrls>();
Assert.IsNotNull(urls);

Этот код вылетает из-за того, что элемент LogOn содержит строку со специальными символами.

Я получаю эту ошибку:

{"Error processing node resource FileResource: [PkUrls.xml] [filepath]"}

InnerException:

{"An error occurred while parsing EntityName. Line 11, position 61."}

StackTrace:

  at Castle.Windsor.Configuration.Interpreters.XmlProcessor.XmlProcessor.Process(IResource resource) in c:\BuildAgent\work\9834359f44c23fee\src\Castle.Windsor\Windsor\Configuration\Interpreters\XmlProcessor\XmlProcessor.cs:line 115
   at Castle.Windsor.Configuration.Interpreters.XmlInterpreter.ProcessResource(IResource source, IConfigurationStore store, IKernel kernel) in c:\BuildAgent\work\9834359f44c23fee\src\Castle.Windsor\Windsor\Configuration\Interpreters\XmlInterpreter.cs:line 83
   at Castle.Windsor.Installer.ConfigurationInstaller.Castle.MicroKernel.Registration.IWindsorInstaller.Install(IWindsorContainer container, IConfigurationStore store) in c:\BuildAgent\work\9834359f44c23fee\src\Castle.Windsor\Windsor\Installer\ConfigurationInstaller.cs:line 74
   at Castle.Windsor.WindsorContainer.Install(IWindsorInstaller[] installers, DefaultComponentInstaller scope) in c:\BuildAgent\work\9834359f44c23fee\src\Castle.Windsor\Windsor\WindsorContainer.cs:line 319

Существует способ, каким образом я могу иметь специальные символы в значении элемента XML и использовать этот файл XML для подтверждения Windows IoC?

Я не уверен, возможно ли это

1 Ответ

4 голосов
/ 04 марта 2012

Вам нужно экранировать & как &amp;, потому что & - это специальный символ в XML:

<LogOn>https://pk.zet.com/overenie?isWap=0&amp;uri=http%3A%2F%2Fpk.zet.com%2F</LogOn>

В качестве альтернативы вы можете написать его как CDATA :

<LogOn><![CDATA[https://pk.zet.com/overenie?isWap=0&uri=http%3A%2F%2Fpk.zet.com%2F]]></LogOn>

В этом URL нет других символов, которые были бы особенными в XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...