2009-04-19 5 views
3

Même si la solution est si évidente que je n'aurais jamais dû poster cela, je la laisse comme un rappel et un point de référence utile pour les autres.Pourquoi une exception est-elle levée depuis Spring.NET lors de l'appel de ContextRegistry.GetContext()?

J'ai ce qui suit dans mon fichier app.config:

<sectionGroup name="spring"> 
    <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/> 
    <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" /> 
</sectionGroup> 

Suivi par:

<spring> 
    <context> 
    <resource uri="config://spring/objects"/> 
    </context> 
    <objects xmlns="http://www.springframework.net"> 
    <object name="mediaLibrary" type="AlbumLibraryWPF.AlbumLibrary, AlbumLibraryWPF"/> 
    </objects> 
</spring> 

Puis dans mon application, j'ai:

using Spring.Context; 
using Spring.Context.Support; 

public partial class AlbumChecker : Window 
{ 
    private DataTable dataTable; 

    private Library library; 
    private Thread libraryThread; 

    public AlbumChecker() 
    { 
     InitializeComponent(); 

     CreateToolTips(); 

     IApplicationContext ctx = ContextRegistry.GetContext(); 
     library = (Library)ctx.GetObject("mediaLibrary"); 

     // Other initialisation 
    } 

    // Other code 
} 

Tout compile assez bien, cependant, je reçois une exception levée lors de l'appel de GetContext():

Error creating context 'spring.root': Could not load type from string value 
'AlbumLibraryWPF.AlbumLibrary, AlbumLibraryWPF'. 

J'ai vérifié la documentation Spring.NET et ne peut pas voir ce que je fais mal - mais j'ai bien eu quelque chose de mal, sinon il ne soulèverait pas l'exception!

AlbumLibraryWPF est l'espace de noms et AlbumLibraryWPF.AlbumLibrary est le nom complet de la classe que je veux instancier. Je devine que c'est ce que j'ai tort, mais je ne vois pas comment.

Répondre

4

Je me sens si idiot. C'était parce que j'avais échoué à copier le AlbumLibrary.dll dans le bon répertoire de sortie. Cela signifiait que Spring ne pouvait pas le trouver - même après avoir corrigé le problème de nom de l'assemblage Kent mis en évidence.

+0

J'ai eu exactement le même problème parce que les résultats de mon projet pointaient vers des endroits différents. Changer les projets pour sortir la DLL dans le même répertoire a tout fixé pour moi – lomaxx

0

Vous devez utiliser tha id attribut au lieu de name:

<object id="mediaLibrary" type="AlbumLibraryWPF.AlbumLibrary, AlbumLibraryWPF"/> 

En outre, il devrait être config://spring/objects au lieu de config://spring/obects.

Vous devez vérifier que vous avez un type appelé AlbumLibrary dans l'espace de noms AlbumLibraryWPF défini dans l'assemblage AlbumLibraryWPF.

+0

Non - id provoque toujours l'exception à être jeté – ChrisF

+0

La seconde était une faute de frappe - J'ai essayé de couper et coller du code, mais Firefox prétendu que je avais besoin d'un plug-in pour être en mesure de voir le contenu - alors je l'ai tapé à nouveau. – ChrisF

1

Le nom après la virgule doit être le nom de l'assembly, qui n'est pas nécessairement le même que le nom de l'espace de nom.

+0

Presque - c'était parce que j'avais oublié de copier la DLL AlbumLibrary dans le bon répertoire de sortie. – ChrisF

-1

Vous pouvez essayer de changer le type. Le type = "AlbumLibraryWPF.AlbumLibrary, AlbumLibraryWPF", premier paramètre signifie NameSpace et le deuxième paramètre (derrière le point) signifie Nom de la solution.

  • "AlbumLibraryWPF.AlbumLibrary" = nom NameSapce
  • "AlbumLibraryWPF" = nom solution
+0

Ce n'est pas le nom de la solution, mais le nom de l'assembly, s'il vous plaît corriger votre réponse. – Marijn

+0

'type =" namespace.type, assembly "' – Marijn

+2

Bien que j'apprécie l'effort - j'ai résolu le problème il y a 2 ans et demi. Voir ma réponse avec la coche d'acceptation;) – ChrisF

-1
  1. Ouvrir ou VS2012 VS2010 avec autorisations d'administrateur
  2. Config: type = "namespace.type, assembly "

Essayez ensuite d'exécuter à nouveau votre solution.

0

Je recevais cette erreur parce que, par erreur, il y avait une faute de frappe [! * 2] dans le fichier app.config. Une fois que j'ai enlevé ça, l'erreur est partie. quelque chose comme ça

<context> 
    <!--<resource uri="~//Aspects.xml"/>--> 
    <!--<resource uri="~//Dao.xml"/>--> 
    <!--<resource uri="~//Spring.xml"/>--> 
    <resource uri="file://Spring.xml"/> 
    <resource uri="file://Dao.xml"/> 
</context> 

* 2

Questions connexes