Элемент value не может содержать дочерний элемент object, потому что модель содержимого родительского элемента является только текстом.

У меня есть свойство типа IDictionary с типом ключа и типом значения, отличным от строки. В большинстве примеров, приведенных в Интернете и в Spring.Net, одним из типов является строка.

Вот настройки конфигурации:

<property name="DirectoryServiceAgents">
  <dictionary key-type="OM.ServiceTier.DTO.Transients.AuthenticationDomainIdentifier, OM.ServiceTier" value-type="OM.ServiceTier.Services.User.Internal.IDirectoryServiceAgent, OM.ServiceTier">        
    <entry>
      <key>
        <object type="OM.ServiceTier.DTO.Transients.AuthenticationDomainIdentifier, OM.ServiceTier">
          <constructor-arg type="string" value="${activeDirectory.Domain}"/>
        </object>
      </key>
      <value>
        <object type="OM.ServiceTier.Services.User.Internal.DirectoryServiceAgent, OM.ServiceTier">
          <property name="LDAPPath" value="${activeDirectory.LDAPPath}"/>
          <property name="LDAPContainer" value="${activeDirectory.LDAPContainer}"/>
          <property name="UserName" value="${activeDirectory.UserName}"/>
          <property name="Password" value="${activeDirectory.Password}"/>
        </object>
      </value>
    </entry>
  </dictionary>
</property>

Я получаю следующее ConfigurationErrorException:

Ошибка при создании контекста "spring.root": элемент "http://www.springframework.net:value" не может содержать дочерний элемент "http://www.springframework.net:object", поскольку модель содержимого родительского элемента только текст.

Что-то не так в моей конфигурации?


person Kiru    schedule 23.05.2011    source источник


Ответы (1)


Я не уверен, поддерживает ли конфигурация словаря встроенный определения объектов для ключей и / или значений. Это не упоминается в документации по установке значений коллекции < / а>.

Не могли бы вы попробовать эту конфигурацию:

<object>
  <!-- snip -->
  <property name="DirectoryServiceAgents">
    <dictionary 
       key-type="OM.ServiceTier.DTO.Transients.AuthenticationDomainIdentifier, OM.ServiceTier" 
       value-type="OM.ServiceTier.Services.User.Internal.IDirectoryServiceAgent, OM.ServiceTier">        
      <entry key-ref="authDomainId" value-ref="serviceAgent"/>
    </dictionary>
  </property>
  <!-- snip -->
</object>    

<object id="authDomainId" 
        type="OM.ServiceTier.DTO.Transients.AuthenticationDomainIdentifier, OM.ServiceTier">
  <constructor-arg type="string" value="${activeDirectory.Domain}"/>
</object>

<object id="serviceAgent"
        type="OM.ServiceTier.Services.User.Internal.DirectoryServiceAgent, OM.ServiceTier">
  <property name="LDAPPath" value="${activeDirectory.LDAPPath}"/>
  <property name="LDAPContainer" value="${activeDirectory.LDAPContainer}"/>
  <property name="UserName" value="${activeDirectory.UserName}"/>
  <property name="Password" value="${activeDirectory.Password}"/>
</object>
person Marijn    schedule 23.05.2011
comment
Используя ‹entry key-ref = authDomainId value-ref = serviceAgent /› это сработало. - person Kiru; 24.05.2011