2010-07-30 4 views
1

J'essaie d'injecter un IList dans un constructeur et je veux savoir si c'est possible et si oui quelqu'un pourrait m'éclairer? Le fait qu'il demande un convertisseur de type me fait penser que je ne peux pas le faire.Spring.NET - constructor-args de IList <Interface>

J'ai essayé ....

<object name="DataLayer.DataServices.IGetAccountDatabase" type="DataServices.LinqToEntities.EntityDataModel, DataServices.LinqToEntities" singleton="false"></object> 
<object name="DataLayer.DataServices.IGetAccountMessage" type="DataServices.VMX.VmxModel, DataServices.VMX" singleton="false"></object> 

<object name="DataLayer.DataServices.IDataService" type="DataServices.NavigationModel, DataServices" singleton="false"> 
    <constructor-arg> 
     <list element-type="DataLayer.DataServices.IGetAccount, DataLayer" > 
      <idref object="DataLayer.DataServices.IGetAccountMessage"/> 
      <idref object="DataLayer.DataServices.IGetAccountDatabase"/> 
     </list> 
    </constructor-arg> 
</object> 

Erreur de création objet avec le nom 'DataLayer.DataServices.IDataService' défini dans le « fichier [D: \ Workspace \ DataServices \ Main \ Source \ DataServices \ TestResults \ 2010 -07-30 11_58_31 \ Out \ Spring.xml] ': L'initialisation de l'objet a échoué: Impossible de convertir l'élément de liste géré' DataLayer.DataServices.IGetAccountMessage 'de [System.String] en [DataLayer.DataServices.IGetAccount] lors de l'initialisation de la propriété 'argument constructeur' pour l'objet 'DataLayer.DataServices.IDataService'. Avez-vous un convertisseur de type approprié enregistré?

Toute aide appréciée. thnx

+0

Il n'y a rien de mal avec cette partie de votre configuration XML, cela devrait fonctionner (et c'est certainement possible). Vous avez probablement fait une erreur ailleurs. Pouvez-vous ajouter les définitions xml pour business.IGetAccount_A et business.IGetAccount_B? Et ces deux objets implémentent-ils l'interface business.IGetAccount? –

+0

Etes-vous sûr que le message d'erreur que vous affichez est le message d'erreur exact que vous recevez de votre application? –

+0

J'ai éclairci tout (enlevé un peu plus de constructor-args) et raccourci les noms. Va ajouter le reste de la config ... – tjh7

Répondre

1

Je pense que si vous spécifiez les objets avec un id au lieu d'un name cela devrait fonctionner (il est généralement préférable d'utiliser des ID). Le idref element peut uniquement être utilisé pour faire référence aux objets par ID.

Si l'objet DataLayer.DataServices.IDataService et les objets DataLayer.DataServices.IGetAccountMessage et DataLayer.DataServices.IGetAccountDatabase font partie du même fichier xml, vous pouvez également utiliser l'attribut local de idref. Ensuite, vous obtenez une erreur lorsque le fichier xml est analysé, avant même que les dépendances ne soient résolues.

+0

Merci beaucoup, j'ai travaillé et vous m'avez orienté dans la bonne direction. Fondamentalement, il semble que l'élément idref passe le nom de l'obejct comme une chaîne alors que l'élément ref passe l'objet, d'où l'erreur que je recevais. Tout en regardant l'élément idref et l'attribut local, je suis tombé sur ce post ... http://stackoverflow.com/questions/269845/spring-net-problem-with-idref-tag-in-config – tjh7

Questions connexes