1

J'ai une application ASP.NET MVC qui utilise Spring.NET 1.2 pour l'injection de dépendance et NHibernate 2.1 pour ORM. Il a fonctionné sur MVC 3, en utilisant S # arp Architecture dans une version légèrement modifiée que nous compilons nous-mêmes, quelque chose dont je m'efforce maintenant de me débarrasser. (À savoir que je vais commencer à utiliser SharpArch référencé .dlls au lieu de pur code source.)ISessionFactoryKeyProvider manquant de CommonServiceLocator lors de la mise à niveau de NHibernate de 2.1 à 3.0

L'initialisation du printemps est effectuée à l'aide des conseils tirés de here, ainsi que l'utilisation de l'SpringServiceLocatorAdapter trouvé here. NH est initialisé en utilisant NHibernateSession.Init de SharpArch, qui est donné à nos deux assemblypaths. Le mappage est effectué avec des fichiers XML HBM. La décision de passer à NH 3 a conduit à un cas sérieux de DLL Hell, à cause duquel j'ai bien sûr dû mettre à jour les binaires FluentNH, NH Validator, SharpArch, Spring et Castle Windsor. Pour faire fonctionner les choses, il fallait beaucoup de travail manuel, changer les références et faire des corrections de code mineures. Tout était prévu.

Maintenant, j'ai le logiciel fonctionne assez bien que Spring est initialisé et le DI fait correctement. Mais lorsqu'un référentiel essaie d'utiliser son objet Session, j'obtiens l'erreur suivante.

Erreur de création objet avec le nom « »: pas de services de type « SharpArch.NHibernate.ISessionFactoryKeyProvider » défini

J'ai essayé de comprendre la cause de cette situation pour le meilleur partie d'un jour maintenant. Il me semble que SpringServiceLocatorAdapter est obsolète, mais je ne trouve aucune information à ce sujet. En outre, en supprimant simplement son utilisation, les sessions des référentiels sont nulles et donc NullReferenceExceptions. Mais autant que je sache, le problème pourrait tout aussi bien être la façon dont NH est initialisé.

J'espère que quelqu'un peut me diriger dans la bonne direction. J'ai du mal à le faire puisque je ne suis pas celui qui a configuré le système pour commencer, et les listes de changements de rupture pour les mises à jour de version sont difficiles à trouver.

Merci beaucoup! Je fournirai bien sûr plus d'informations si nécessaire.

Répondre

1

Vous devez enregistrer un implmentation de ISessionFactoryKeyProvider avec ressort, la mise en œuvre par défaut est DefaultSessionFactoryKeyProvider, dans windsor, la déclaration ressemblerait à ceci:

 container.Register(
       Component.For(typeof(ISessionFactoryKeyProvider)) 
        .ImplementedBy(typeof(DefaultSessionFactoryKeyProvider)) 
        .Named("sessionFactoryKeyProvider")); 
+0

Merci, cela a fonctionné. J'ai ajouté un objet à mon Spring.xml et cela a fait l'affaire. –

Questions connexes